1.set方法内存管理相关的参数
* retain : release旧值,retain新值(适用于OC对象类型)
* assign : 直接赋值(默认,适用于非OC对象类型)
* copy : release旧值,copy新值
2.是否要生成set方法
* readwrite : 同时生成setter和getter的声明、实现(默认)
* readonly : 只会生成getter的声明、实现
3.多线程管理
* nonatomic : 性能高(一般就用这个)
* atomic : 性能低(默认)
4.setter和getter方法的名称
* setter : 决定了set方法的名称,一定要有个冒号 :
*getter : 决定了get方法的名称(一般用在BOOL类型)
@property Book *book // 这个语句是直接赋值的,不会有retain
@property (retain) Book *book // 生成的set语句会有retain的,相当于
- (void)setBook : (Book *)book
{
if (_book = book)
{
[_book release];
_ book = [book retain];
}
}
// 当然,如果property中又retain ,则实现中需要实现dealloc语句
- (void)dealloc
{
[_book release];
[_name release];
[super dealloc];
}
1.@class的作用:仅仅告诉编译器,某个名称是一个类
@class Person; // 仅仅告诉编译器,Person是一个类
2.开发中引用一个类的规范
1> 在.h文件中用@class来声明类
2> 在.m文件中用#import来包含类的所有东西
3.两端循环引用解决方案
1> 一端用retain
2> 一端用assign