[ObjectC]Objective-C内存管理之---属性修饰词
来源:互联网 发布:mac 鼠标 触摸板 编辑:程序博客网 时间:2024/06/03 15:56
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; }
0 0
- [ObjectC]Objective-C内存管理之---属性修饰词
- [ObjectC]Objective-C内存管理机制
- Objective C - 属性的内存管理:
- objectC 内存管理
- iOS:属性、修饰词(内存管理) 及其对应成员变量 、ARC
- Objective C内存管理之理解autorelease
- 2.内存管理之objective-c
- 2.内存管理之objective-c
- Objective-C 内存管理之 _ARC
- Objective-C内存管理之引用计数
- objectc-c 内存
- objectc-c 内存
- iOS经典讲解之Objective-C属性的内存管理原理
- Objective-c - 多个对象的内存管理之:一个对象作为另一个对象的属性
- objective-c内存管理
- Objective-c 内存管理
- Objective-C内存管理~~
- Objective-C内存管理
- 94. Binary Tree Inorder Traversal #Medium
- 多个if else替换为一个if判断
- java中的线程池优点以及处理原理
- js prototype介绍
- 剑指Offer——之字形打印二叉树
- [ObjectC]Objective-C内存管理之---属性修饰词
- javascript调用qt javaScriptWindowObjectCleared()信号
- PLSQL连接本地的ORACLE数据库
- AE接口解析
- 对SharedPreferences的个人使用习惯
- 1.算法开篇
- XListView上拉刷新,下拉加载
- Ajax使用的五步法
- 用java在控制台输出Hello World!