一、注释
#pragma mark - 内容
作用:在Xcode中可以方便定位到该方法的存在
二、点语法
1. 利用点语法替换set方法和get方法
* 方法调用
Student *stu = [Student new]; [stu setAge:100]; int age = [stu age];
* 点语法
stu.age = 100; int age = stu.age;
2. 点语法的本质
* 其实点语法的本质还是方法调用
* 当使用点语法时,编译器会自动展开成相应的方法
三、成员变量的作用域
1. 基本概念
局部变量、全局变量都有自己的作用域,成员变量也不例外
2. 类型
@public : 在任何地方都能直接访问对象的成员变量
@private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)
@protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected)
@package : 只要处在同一个框架中,就能直接访问对象的成员变量
@interface和@implementation中不能声明同名的成员变量
3. @implementation补充
没有@interface,只有@implementation,也可以开发一个类
四、@property和@synthesize
1. @property
* 用在@inteface中
* 用来自动生成setter和getter的声明
* 用@property int age;就可以代替下面的两行
- (int)age; // getter - (void)setAge:(int)age; // setter
* 示例
2. @synthesize
* 用在@implementation中
* 用来自动生成setter和getter的实现
* 用@synthesize age = _age;就可以代替
- (int)age{ return _age; } - (void)setAge:(int)age{ _age = age; }
? 示例
3. @synthesize的细节
1> @synthesize age = _age;
* setter和getter实现中会访问成员变量_age
* 如果成员变量_age不存在,就会自动生成一个@private的成员变量_age
2> @synthesize age;
* setter和getter实现中会访问成员变量age
* 如果成员变量age不存在,就会自动生成一个@private的成员变量age
3> 手动实现
* 若手动实现了setter方法,编译器就只会自动生成getter方法
* 若手动实现了getter方法,编译器就只会自动生成setter方法
* 若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量
4. @property新特性
* 从Xcode4.x后,@property可以同时生成setter和getter的申明和实现
* 默认情况下,setter和getter方法中的实现,会去访问下划线 _ 开头的成员变量
五、id
1. 简介
* 万能指针,能指向任何OC对象,相当于NSObject *
2. 使用
// 注意:id后面不要加上* id p = [Person new];
3. 局限性
调用一个不存在的方法,编译器会马上出错
六、构造方法
1. 对象创建原理
Person *p = [Person new]; // --> alloc + init || // 与下面两句相等的 Person *p = [Person alloc]; // 分配内存 Person *p = [p init]; // 初始化
可以写成下面这样
Person *p = [Person alloc] init];
2. init方法的重写
* init方法的重写过程
- (id)init { if (self = [super init]) { _age = 10; } return self; }
3. 自定义构造方法
* 返回值是id类型
* 方法名都以init开头
- (id)initWithAge:(int)age { if (self = [super init]) { _age = age; } return self; }
* 传递多个参数进行初始化
- (id)initWithAge:(int)age andNo:(int)no;
七、.h和.m文件的抽取
* 每个类分布在不同文件中
* 类的声明放在.h文件,类的实现放在.m文件
* 若想使用某个类,就包含某个类的.h声明文件