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

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


@property

1、set方法内存相关参数

 *retain : release旧值,retain新值(适用于OC对象类型)

 *assign: 直接赋值(默认,适用于非OC对象类型)

*copy: release旧值,copy新值

 

2、是否生成set方法

*readwrite:同时生成settergetter的声明、实现(默认)

*readonly:只会生成getter的声明、实现

 

3、多线程管理

*nonatomic:性能高(一般就用这个),不加锁

*atomic:性能低(默认)

 

4、settergetter方法的名称

*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培训、期待与您交流! -------

你可能感兴趣的:(objective-c)