星空网 > 软件开发 > 操作系统

@property? @property?说说他身后的事情。

@property 后面可以有哪些修饰符?

1.线程安全的         aaomic、nonatomic

2.访问权限的         readonly、readwrite

3.内存管理(ARC)   assign、strong、weak、copy

4.内存管理(MRC)   assign、retain、release

5.指定方法名称    setter = 、getter =

 

围绕头上 想到的一些问题~

什么情况使用 weak 关键字,相比 assign 有什么不同?

首先我们要先去了解 weak 与 assign 是什么。

weak

弱引用,只是单纯的引用某个对象,但是并未拥有该对象。既一个对象被持有无所个弱引用,只要没有强引用指向他,那么他就会被清除释放

assign

用于非指针变量。

用于基础数据类型(例如NSInteger、CGFloat)和C数据类型(int, float, double, char)另外还有id。

我们在什么时候去使用 weak呢?

1.在ARC中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如:delegate 代理属性

2.自身已经对他进行一次强引用,没必要在强引用一次,此时也会使用 weak ,自定义IBOutlet 控件属性一般也使用 weak ;当然,也可以使用 strong。

weak 与 assign 的不同点:

weak 此特质表明该属性定义了一种"非拥有关系"(nonowning relationship)。为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同assign类似, 然而在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。 而assign的“设置方法”只会执行针对"纯量类型" (scalar type,例如 CGFloat 或 NSlnteger 等)的简单赋值操作。assign 可以用非 OC 对象,而 weak 必须用于 OC 对象。

 

怎么用 copy 关键字?

1.NSString、NSArray、NSDictionary 等等经常使用copy关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary;他们之间可能进行赋值操作,为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。

2.block 使用 copy 是从 MRC 遗留下来的“传统”,在 MRC 中,方法内部的 block 是在栈区的,使用 copy 可以把它放到堆区.在 ARC 中写不写都行:对于 block 使用 copy 还是 strong 效果是一样的,但写上 copy 也无伤大雅,还能时刻提醒我们:编译器自动对 block 进行了 copy 操作。如果不写 copy ,该类的调用者有可能会忘记或者根本不知道“编译器会自动对 block 进行了 copy 操作”,他们有可能会在调用之前自行拷贝属性值。这种操作多余而低效。




原标题:@property? @property?说说他身后的事情。

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

美国海外仓哪家靠谱:https://www.goluckyvip.com/tag/95427.html
海外仓的发货形式是怎么样的:https://www.goluckyvip.com/tag/95428.html
第三方海外仓有哪几家:https://www.goluckyvip.com/tag/95429.html
美客多海外仓如何发货:https://www.goluckyvip.com/tag/95430.html
新界海外仓的货是真的吗:https://www.goluckyvip.com/tag/95431.html
美国几家比较大型海外仓:https://www.goluckyvip.com/tag/95432.html
川藏线自驾游要怎么走才比较划算呢?:https://www.vstour.cn/a/411240.html
去日本入住酒店,东西随意用却有一个特殊“要:https://www.vstour.cn/a/411241.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流