美文网首页
iOS 属性特质

iOS 属性特质

作者: 温暖的弦Y | 来源:发表于2016-03-22 16:11 被阅读98次

* assign

设置方法只会执行针对“纯量类型” 的简单赋值操作,如CGFloat,NSInteger

* strong

此特质表明该属性定义了一种“拥有关系”,为这种属性设置新值时,设置方法会先保留新值,并释放旧值,然后再将新值设置上去。

* copy

此特质所表达的所属关系与strong类似。然而设置方法并不保留新值,而是将其‘拷贝’。当属性类型是NSString *时,经常用此特d质来保护其封装性,因为传递给设置方法的新值有可能指向一个NSMutableString类的实例,这个类是NSString的子类,表示一种可以修改其值的字符串,此时若是不拷贝字符串,那么设置完属性之后,字符串的值就可能会在对象不知情的情况下遭人更改。所以,这时就要拷贝一份“不可变”的字符串,确保对象中的字符串值不会无意间变动。

只要实现属性所用的对象是“可变的”,就应该在设置新属性值时拷贝一份。


Objective-C默认声明的一个对象就为__strong

在强引用中,有时会出现循环引用的情况,这时就需要弱引用来帮忙(__weak)。

强引用持有对象,弱引用不持有对象。

* weak和strong 用来修饰属性如 @property (nonatomic, weak) NSString *name;

* __weak 和 __strong 用来修饰变量


weak 与assign 区别


##### @property (nonatomic, weak) id delegate;

##### @property (nonatomic, assign)id delegate;

*weak 和 assign* 是一种“非拥有关系”的指针,通过这两种修饰符修饰的指针变量,都不会改变被引用对象的引用计数。但是在一个对象被释放后,weak 会自动将指针指向 nil,而 assign 则不会。 在 iOS 中,向 nil 发送消息时不会崩溃的,但是 assign 就会导致野指针的错误 unrecoginzed selector sent to instance.

所以我们如果修饰代理属性,还是用weak 修饰吧,比较安全。


typedef void (^selectedCell) (NSIndexPath * indedxpath);

##### *delegate 和 block 的选择:*

1.多个消息传递,应该使用delegate

2.一个委托对象的代理属性只能有一个代理对象

3.单例对象最好不要用delegate

单例对象由于始终都是同一个对象,如果使用delegate,就会造成我们上面说的delegate属性被重新赋值的问题,最终只能有一个对象可以正常响应代理方法。

* ######代理更加面向过程,block则更面向结果。

比如网络请求回来,通过success/failure 代码块来展示比较好

* ###### 从性能上说,block的性能消耗要略大于delegate,因为block会涉及到 栈区向堆区拷贝等操作,时间和空间上的消耗都大于代理。而代理只是定义了一个方法列表,在遵守协议对象的objc_protocol_list 中添加一个节点,在运行时向遵守协议的对象发送消息即可。

相关文章

  • iOS 属性特质

    * assign 设置方法只会执行针对“纯量类型” 的简单赋值操作,如CGFloat,NSInteger * st...

  • iOS开发属性特质

    原子性 atomic (原子性)(系统默认): 使用同步锁。能够保证赋值和获取是线程安全的。但不能保证操作和访问...

  • iOS —— 属性及其特质

    【从历年weak看iOS面试】2013年面试官:代理用weak还是strong?我 :weak 。面试官:明天来上...

  • 【已解决】IOS/Mac OS X开发中nonatomic代表什

    问题 网上流传的IOS或者Mac OS X源码内,某些属性特质会被声明为nonatomic,nonatomic代表...

  • 属性特质

    使用属性时还有一个问题要注意,就是其各种特质设定也会影响编译器所生成的存取方法,属性可以拥有的特质分为四类: 原...

  • runtime 如何实现 weak 属性?

    原文:iOS面试题大全 weak 此特质表明该属性定义了一种「非拥有关系」(nonowning relations...

  • 编写高质量iOS与OS X代码的52个有效方法(二)

    对象、消息、运行时 理解“属性”的概念 属性的基础用法就不多叙述了属性特质 属性拥有的特质分为4类 1、原子性 a...

  • 细读属性特质

    “属性”(property)是Objective-C的一项特性,用于封装对象中的数据。使用属性之后,编译器会自动写...

  • NSAttributedString属性

    属性字段 参考文章iOS富文本iOS 字符属性NSAttributedString描述

  • 【13、丙子学习模式】

    13、丙子 丙子五行概略: 丙: 五行属性:火。特质类象:艳丽、虚幻、炽热、爆发、能量。 子: 五行属性:水。特质...

网友评论

      本文标题:iOS 属性特质

      本文链接:https://www.haomeiwen.com/subject/aqkllttx.html