——- android培训、java培训、期待与您交流! ———-
点语法
利用点语法替换 set 方法和 get 方法,其实点语法的本质还是方法调用
格式 : 对象.成员变量名
判断 点语法语句是赋值还是被赋值后,会自动展开成相应的方法
赋值 :
对象.成员变量名 = 值;--> [对象 set成员变量名 : 值] --> set方法
被赋值:
变量 = 对象.成员变量名 --> [对象 成员变量名] --> get方法
注意:在对象方法内部用点语法调用本身会出现死循环
特殊注释
#pragma mark - 注释内容 // 会有一个分割线
#pragma mark 注释内容 // 没有分割线
成员变量的作用域
类型:
@private : 只能在当前类的对象方法中直接访问
-
@protected : 可以在当前类以及子类的对象方法中直接访问
-
@public : 任何地方都可以直接访问
-
@package : 同一个“体系内”(框架)可以访问,介于 @private 和 @public 之间
@implementation 中默认是 @private
@interface 中默认是 @protected
补充:
1.没有 @interface,只有 @implementation也可以定义一个类,但不建议使用
2. @implementation 不能定义与 @interface 相同的成员变量
@property
用在 @interface 中,用来自动生成 seter/geter 的声明
@synthesize
用在 @implementation 中,用来自动生成 seter/geter 的实现
@synthesize 的细节
@synthesize age = _age;
1.seter和geter实现中会访问成员变量 _age
2.如果成员变量 _age 不存在,就好自动生成一个 @private 的成员变量 _age@synthesize age;
1.seter和geter实现中文会访问成员变量 age
2.如果成员变量 _age 不存在,就好自动生成一个 @private 的成员变量 _age手动实现
1.若手动实现了seter方法,编译器会自动生成geter方法。反之亦然
2.但是若同时手动实现了seter和geter方法,编译器就不会自动生成不存在的成员变量
更新: @property 现在兼具 @property 和 @synthesize 的功能,可以同时声明和实现seter和geter方法。默认情况下,seter和geter方法中的实现,会访问 _ 开头的成员变量
id : 万能指针
id : 可以指向任何OC对象,相当于 NSObject *
id类型的定义
typedef struct objc_object{
Class isa;
} *id;
使用 : id 变量名 = [类名 new];
id 后不需要 *
——- android培训、java培训、期待与您交流! ———-