黑马程序员——Objective-c——property和class
2015-03-24 14:47
302 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
*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;
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培训、期待与您交流! -------
@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培训、期待与您交流! -------
相关文章推荐
- 黑马程序员:Objective-c中@class和#import的区别
- 黑马程序员——Objective-C学习之@property @synthesize和id及点语法
- 黑马程序员_object c学习日记④_内存管理二:@property参数强化、@class及autorelease
- 黑马程序员------Objective-C-------#include,#import与@class的讨论
- [Objective-C] class add a property and its setter and getter
- 黑马程序员----Objective-C学习笔记之@class与循环retain问题
- The content of element type "session-factory" must match "(property*,mapping*,(class-cache|collectio
- Invalid property 'LyMhXnyjjsrDaoImpl' of bean class
- Objective-C中#import与@class如何规避多文件结构导致的重复包含
- mybatis There is no getter for property named 'xx' in 'class java.lang.String
- 黑马程序员-iOS基础-Objective-C基础(二)面向对象思想及类
- 深入理解Objective-c中@class的含义
- 当传入数据只有一个时mybatis中<if>判断会出现There is no getter for property named 'subjectId' in 'class java.lang....
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之04-数据类型和表达式——黑马 IOS 技术博客
- 黑马程序员——Objective-C程序设计(第4版)学习笔记之19-归档——黑马 IOS 技术博客
- 黑马程序员--Objective-C之--自动释放池的概念以及使用
- [SSM]There is no getter for property named 'token_exptime' in 'class com.hdu.model.Student'
- 黑马程序员---初识反射,Class,Constructor,Field
- 反射获取Class中Property的值
- Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等