[ObjectC]Objective-C内存管理之---属性修饰词
2016-05-25 14:46
441 查看
iOS经典面试题总结--内存管理 :
分别写一个setter方法用于完成@property (nonatomic,retain)NSString *name和@property (nonatomic,copy) NSString *name
当把属性的语义特性分别声明为assign,retain,copy时, 自动生成setter, getter方法内部实现
假定有一个车类Car.h中定义三个属性
分别写一个setter方法用于完成@property (nonatomic,retain)NSString *name和@property (nonatomic,copy) NSString *name
-(void)setName:(NSString *)name { [name retain]; [_name release]; _name = name; } -(void)setName:(NSString *)name { [_name release]; _name = [name copy]; }retain属性的setter方法是保留新值并释放旧值,然后更新实例变量,令其指向新值。顺序很重要。假如还未保留新值就先把旧值释放了,而且两个值又指向同一个对象,先执行的release操作就可能导致系统将此对象永久回收。
当把属性的语义特性分别声明为assign,retain,copy时, 自动生成setter, getter方法内部实现
假定有一个车类Car.h中定义三个属性
@property (nonatomic, retain) NSString * brand; //品牌 @property (nonatomic, copy) NSString * colour; //颜色 @property (nonatomic, assign) CGFloat price; //价格以下是把属性的语义特性分别声明为assign,retain,copy时, 自动生成setter, getter方法内部实现:
//当把属性的语义特性声明为retain时,自动生成setter方法内部实现 - (void)setBrand:(NSString *)brand { if (_brand != brand) {//如果旧值不等于新值 [_brand release];//旧值先release _brand = [brand retain];//新值retain赋值给旧值 } } //当把属性的语义特性声明为retain时,自动生成getter方法内部实现 - (NSString *)brand { return [[_brand retain] autorelease]; } //当把属性的语义特性声明为copy时,自动生成setter方法内部实现 - (void)setColor:(NSString *)color { if (_color != color) { [_color release]; _color = [color copy]; } } //当把属性的语义特性声明为copy时,自动生成getter方法内部实现 - (NSString *)color { return [[_color retain] autorelease]; } //当把属性的语义特性声明为assign时,自动生成setter方法内部实现 - (void)setPrice:(CGFloat)price { _price = price; } //当把属性的语义特性声明为assign时,自动生成getter方法内部实现 - (CGFloat)price { return _price; }
相关文章推荐
- QT与JavaScript互调 javaScriptWindowObjectCleared()信号
- javascript调用qt javaScriptWindowObjectCleared()信号
- objective-c启用ARC时的内存管理
- IllegalArgumentException:Bean object must not be null
- struts2启动报错com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
- 关于ORA-04021的解决办法(timeout occurred while waiting to lock object)
- java入门教程-4.9Java Object类
- [Ruby笔记]13.Ruby object .replace("") .dup .freeze
- Objective-C ---NSFileManager NSFileHandle (梳理整理)
- Foundation => Objective-C - NSArray & NSMutableArray
- Objective-c中数字型字符串转换NSNumber方法
- Foundation => Objective-C - NSString
- 使用Object-C实现23种设计模式之原型模式
- 深入了解Qt(二)之元对象系统(Meta-Object System)
- Object-C 之 字符串
- object_constructor
- iOS:Objective-C中Self和Super详解
- VC++之 CreateEvent和SetEvent及WaitForSingleObject的用法
- List<Map<String,Object>> 的快速排序
- Struts2_Object-Graph Navigation Language(OGNL)