------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
@property
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 ( nonatomic ,assign , readwrite,getter = isRich) BOOL rich;
@property ( retain) NSString *name;
@class
1>使用场景
对于循环依赖关系来说,比较A类引用B类,同时B类也引用A类
#import "B.h"
@interface A : NSObject
{
B *_b;
}
@end
#import "A.h"
@interface B : NSObject
{
A *_a;
}
@end
这种代码因为循环引用编译会报错。当使用@class在两个类中相互声明,就不会出来现编译报错。
2>用法概括
使用@class 类名 :就可以引用一个类,说明一下它是一个类
3>和#import的区别
*#import方式会包含被引用类的所有信息,包括被引用类的变量和方法;@class只是告诉编译器在A.h文件中B *_b只是类的声明,具体这个类有什么信息,这里不需要知道,等实现文件中真正要用到时,才会真正去查看B类中的信息。
*如果有上百个头文件都#import了同一文件,或者这些文件依次被#import,那么一旦最开始的头文件稍有改动,后面引用到这个文件的所有类都需要重新编译一遍,效率低下,@class方式不会出现这个问题。
*在.m实现文件中,如果需要引用到被引用类的实体变量或者方法时,还需要使用#import方式引入被引用类
4>使用@class注意事项
*开发中引用一个类的规范:在.h文件中用@class来声明类,在.m文件中用#import来包含引用类
*两端循环retain引用解决方案:一端用retain(@property ( nonatomic ,retain) B *b;),另一端用assign(@property ( nonatomic , assign) A *a;)
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------