您的位置:首页 > 移动开发 > Objective-C

黑马程序员——Objective-c——property和class

2015-03-24 14:47 302 查看
------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培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐