博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
assign, copy, retain - 仔细看看怎么回事
阅读量:5128 次
发布时间:2019-06-13

本文共 1159 字,大约阅读时间需要 3 分钟。

用@property不就完了么,为啥要自己写Getter和Setter?

有些时候需要在getter和setter方法中加入些特别的操作。

最简单的getter和setter

- (SomeVariable)someValue{    return someValue;}
- (void)setSomeValue:(SomeVariable)aSomeVariableValue{    someValue = aSomeVariableValue;}

如果我们把nonatomic, assign的property展开,就能得到以上的getter和setter。

@property (nonatomic, assign) SomeVariable someValue;

以上对于primitive type和其他非对象类数据结构管用。例如:基础数据类型char、int、float、long、double、或者Objective C的能被回收的对象(只在Mac上才有GC,iOS上就木有了)

那要是展开个retain的property,那getter和setter会是啥样子呢

- (void)setSomeInstance:(SomeClass *)aSomeInstanceValue{    if (someInstance == aSomeInstanceValue)    {        return;    }    SomeClass *oldValue = someInstance;    someInstance = [aSomeInstanceValue retain];    [oldValue release];}

最后那段代码好绕啊,写成这样不就好了嘛?

- (void)setSomeInstance:(SomeClass *)aSomeInstanceValue{    [someInstance release];    someInstance = [aSomeInstanceValue retain];}

上面的代码的第一个release会在retain之前就把对象给销毁了。

那写个setter这么麻烦,有木有简单点的语法?有,如下:

- (void)setSomeInstance:(SomeClass *)aSomeInstanceValue{    [someInstance autorelease];    someInstance = [aSomeInstanceValue retain];}

 转载自:

转载于:https://www.cnblogs.com/xuanyuanchen/archive/2012/06/25/2561095.html

你可能感兴趣的文章
typeof与instanceof的区别
查看>>
网站搭建(一)
查看>>
SDWebImage源码解读之SDWebImageDownloaderOperation
查看>>
elastaticsearch
查看>>
postgreSQL 简单命令操作
查看>>
Spring JDBCTemplate
查看>>
Radon变换——MATLAB
查看>>
第五章笔记
查看>>
Iroha and a Grid AtCoder - 1974(思维水题)
查看>>
gzip
查看>>
转负二进制(个人模版)
查看>>
LintCode-Backpack
查看>>
查询数据库锁
查看>>
[LeetCode] Palindrome Number
查看>>
我对于脚本程序的理解——百度轻应用有感
查看>>
SQL更新某列包含XX的所有值
查看>>
网易味央第二座猪场落户江西 面积超过3300亩
查看>>
面试时被问到的问题
查看>>
spring 事务管理
查看>>
VS2008 去掉msvcr90的依赖
查看>>