您的位置:首页 > 移动开发 > Objective-C

objective-c 中 . 运算符详解

2015-08-09 11:09 579 查看
//
//  main.m
//  OC中的.语法
//
//  Created by 就不告诉你我是谁 on 15-8-9.
//  Copyright (c) 2015年 xuqigang. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "Test01.h"
//@interface Test01 : NSObject
//{
//    int a;
//@public int b;
//    int c;
//}
//@property int c;
//- (void) print;
int main(int argc,
const char * argv[])
{
    @autoreleasepool {     
        // insert code here...
        NSLog(@"Hello, World!");
  /*   OC中 .
语法的功能:
        1、通过 . 操作符
可以直接调用类中的成员方法
        2、通过 . 操作符
可以进行实例变量的赋值和读取操作,前提是该变量在类中已经实现了setter 和 getter
方法。其中setter 和 getter方法的定义和实现可以自定义实现,也可以通过@property
声明 @synthesize 实现的方式来完成。如果一个实例变量只有setter
或 getter 方法 那么这个实例变量也只能进行赋值
或者 取值操作。值得注意的是,例如:成员变量 int name; setter方法必须按照这种方式声明:-
(void) name; getter方法必须这样声明:- (int) getName;
        3、对于一个用@public
修饰的成员变量,我们还可以在外面通过-> 操作符来进行取值和赋值操作,否则不能使用该方式。->
不能用于访问成员函数。
        多说无益,举例说明:
        */
        int data=9;
        Test01 *p = [[Test01
alloc] initWith:2 :3 :5];//实例化一个对象p
并将其成员变量初始化为 2 3 5 ;
/*      下面开始说OC 里面 .
语法的用处,请看下面示例:
        p.a;程序报错 无法使用 .
语法 因为类中没有实现setter和getter方法
        p->a; 使用-> 直接访问成员变量 
程序报错  原因  使用@interface
定义一个类时,里面的成员属性默认为protected 在外部无法访问
        data=p.b; 这里不能进行赋值操作 
原因:没有实现 setter getter 方法
*/
        data=p->b;
        p->b=data;
/*     这里通过-> 变量b
可以进行取值和赋值操作 因为 b的属性权限为public
        data=p.b; 程序报错!这里不能进行取值操作 
原因:虽然成员变量b 被声明为public 类型
但没有实现 setter getter 方法,所以不能使用.运算符*/
        data=p->c;
        p->c=data;
/*      这里通过-> 变量c
可以进行取值和赋值操作 因为 c的属性权限也为public*/
        data=p.c;
        p.c=data;
/*      里可以进行取值、赋值操作  原因:成员变量c
通过@property 和@synthesize
实现了 setter getter 方法,所以能使用.运算符*/
        p.print;
//通过 . 语法也可以直接调用类中的成员方法
/*      p->print; -> 操作符 是用来访问成员变量的 
不能用来调用成员方法*/
        data=p.func;//调用成员方法
并用data 接收方法返回值
        NSLog(@"%d\n",data);
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: