在非ARC环境下:
1.set方法内存管理的相关参数
传入retain(@property(ratain))会release旧值,retain新值。(适用于OC对象)
传入assign,表示不是OC对象不需要管理,直接赋值。通常都是默认的assign,适用于非OC对象
传入copy,release旧值 copy新值
2.是否生成set方法
readwrite-会同时生成成员变量的setter和getter的声明和实现
readonly 只会生成戈塔特人的声明和实现
3.多线程管理
nonatomic--表示性能高,一般都用这个,提高性能。//@property (nonatomic , retain)
atomic--性能低,一般系统都是默认这个。(所以在代码中一定要写nonatomic)
4.setter和getter方法的名称
setter--决定set方法的名称,(一定有要加冒号)
getter:决定get的名称(一般用在BOOL类型中)
“@property (nonatomic , retain) Person *person;”这句代码会自动生成性能高的如下代码
- (void) setPerson:(Person *)person
{
if(person!=_person)
{
[_person release];
_person = [person retain];
}
}
当然在也要在dealloc方法中也要release这个_person对象
- (void)dealloc
{
[_person release];
[super dealloc];
}
注意:在ARC环境中,retain release方法不能使用,就用strong代替retain,weak代替release。
@class和@import的区别:
1.@import会包含被引用类的所有信息,包括类和方法,二@class只是告诉编译器在“.h”文件中@class +类名,只是类的声明,具体这个类有什么信息,这里不需要知道,等实现文件中真正需要用到时,才会import该类的信息。
2.如果很多文件都import了同一个文件,或都被这些文件import。那一但头文件有少许改动。后面引用了这个文件的所有类都需要从新编译一次,这样太影响效率,二@class就不会出现这个问题。
3.在类的.m文件中,如果需要引用到被引用类的实体变量和或者方法时,还需要使用import方式引入到被引用类。
原文:http://www.cnblogs.com/jingdian/p/4276575.html