OC坑集: ARC 下覆写 setter/getter
来源:互联网 发布:网络机顶盒哪个最好 编辑:程序博客网 时间:2024/06/06 23:35
如果你看过博客 OC坑集: 实例变量不需要 @synthesize, 接下来的内容对你来说就是小菜一碟.
在非 ARC 时代, 就是人们常说的 MRC(手动管理内存)时代, 我们需要 retain/release/autorelease 等.
cocos2d-x 也借鉴了 oc 的 retain 等操作来管理内存.
这里真心要吐槽一下, c++ 新标准为毛越来越像 java.
好了, 不扯淡了, 说正事.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在说 ARC 下覆写 setter/getter 之前, 先看一下 MRC下如何覆写 setter/getter.
#import <Foundation/Foundation.h>@interface Cat : NSObject@property (copy, nonatomic) NSString *name;- (void)echo;@end
实现文件
#import "Cat.h"@implementation Cat@synthesize name = _name;@synthesize dog = _dog;- (void)setDog:(Dog *)dog{ if (_dog != dog) { [_dog release]; _dog = nil; _dog = [dog retain]; }}- (Dog *)dog{ return _dog;}- (void)setName:(NSString *)name{ //TODO}- (NSString *)name{ return _name;}- (void)echo{ _name = @"XiaoHua"; NSLog(@"name = %@", _name);}@end
在 ARC 下, 不允许出现 retain/release/autorelease 等关键字. 头文件重新声明如下, 其中 retain 被 strong 取代.
#import <Foundation/Foundation.h>#import "Dog.h"@interface Cat : NSObject@property (strong, nonatomic) Dog *dog;@property (copy, nonatomic) NSString *name;- (void)echo;@end
实现文件
#import "Cat.h"@implementation Cat@synthesize name = _name;@synthesize dog = _dog;- (void)setDog:(Dog *)dog{ if (_dog != dog) { _dog = dog; }}- (Dog *)dog{ return _dog;}- (void)setName:(NSString *)name{ //TODO}- (NSString *)name{ return _name;}- (void)echo{ _name = @"XiaoHua"; NSLog(@"name = %@", _name);}@end
实例变量 _name是 copy 属性, 这里也展示一下其 setter 方法
- (void)setName:(NSString *)name{ if(_name != name) { _name = nil; _name = [name copy]; }}
提醒大家一点:
在覆写的 setter 和 getter 方法里面不要使用点语法访问自己的实例变量(会造成循环调用, crash), 直接访问实例变量即可.
更多关于 ARC 的问题, 请关注后续博客.
0 0
- OC坑集: ARC 下覆写 setter/getter
- oc - getter,与 setter
- // OC 中的 getter setter
- OC中的setter getter
- OC学习之getter 和 setter
- OC的setter和getter笔记
- [黑马程序员][OC]setter和getter
- IOS--OC--Lesson 封装 setter getter
- 黑马程序员-OC-getter & Setter方法
- OC - @property与setter,getter方法
- OC中getter和setter的运用
- iOS ARC MRC情况下重写setter getter方法
- iOS ARC MRC情况下重写setter getter方法
- iOS ARC MRC情况下重写setter getter方法
- getter/setter
- setter,getter
- getter、setter
- getter ,setter
- c#中发送邮件
- Python_Scrapy_6.错误与异常
- 黑马程序员<Java笔记<IO流>>
- Servlet--ServletConfig接口,GenericServlet类
- 二叉树 各种遍历算法
- OC坑集: ARC 下覆写 setter/getter
- joor,一个基于fluent API设计的反射API
- 《重构》第一章 笔记
- HDU 数塔 (dp)
- android studio上传代码到github
- 估算之痛
- 【机房收费系统】——存储过程的应用
- Linux内核中常见内存分配函数
- HDU Common Subsequence (dp)