黑马程序员技术交流社区

标题: 【iOS技术分享】关于属性关键字,你又知道多少?(下) [打印本页]

作者: Simpon    时间: 2016-5-6 17:25
标题: 【iOS技术分享】关于属性关键字,你又知道多少?(下)
本帖最后由 Simpon 于 2016-10-27 10:31 编辑


前文说道:关于属性的创建以及部分关键字的解释与区别,进行了一定程度上的解释。
具体可以查看:
【iOS技术分享】关于属性关键字,你又知道多少?(上)
本文会继续阐述一些跟属性关键字有关的一些技术点。

一、@synthesize 和 @dynamic 分别有什么作用

@property 有两个对应的词,一个是@synthesize,一个是@dynamic
如果@synthesize@dynamic 都没写,那么默认的就是
  1. @syntheszie var = _var;
复制代码
二、ARC 下,不显式指定任何属性关键字时,默认的关键字都有哪些?

基本数据:
普通的 OC 对象:

三、@synthesize 合成实例变量的规则是什么?假如 property 名为 foo,存在一个名为_foo 的实例变量,那么还会自动合成新变量么?

先回答第二个问题:不会!!!不会!!!不会!!!

四、在有了自动合成属性实例变量之后,@synthesize 还有哪些使用场景?

首先的搞清楚什么情况下不会 autosynthesis(自动合成):
  • 同时重写了 setter 和 getter 时
  • 重写了只读属性的 getter 时
  • 使用了@dynamic


五、怎么用 copy 关键字?

NSStringNSArrayNSDictionary 等等经常使用 copy 关键字,是因为他们有对应的可变类型:NSMutableStringNSMutableArrayNSMutableDictionary.
为确保对象中的属性值不会无意间变动,应该在设置新属性值时拷贝一份,保护其封装性block,也经常使用 copy,关键字block。


六、用@property 声明的 NSString(或 NSArray,NSDictionary)经常使用 copy 关键字,为什么?如果改用 strong 关键字,可能造成什么问题?

   因为父类指针可以指向子类对象,使用 copy 的目的是为了让本对象的属性不受外界影响,使用 copy 无论给我传入是一个可变对象还是不可对象,我本身持有的就是一个不可变的副本.
   如果我们使用是 strong,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,那么会影响该属性.

复制详解:


   这里需要注意的是集合对象的内容复制仅限于对象本身,对象元素仍然是指针复制。

七、这个写法会出什么问题: @property(copy)NSMutableArray *array;

   因为 copy 策略拷贝出来的是一个不可变对象,然而却把它当成可变对象使用,很容易造成程序奔溃这里还有一个问题,该属性使用了同步锁,会在创建时生成一些额外的代码用于帮助编写多线程程序,这会带来性能问题,通过声明 nonatomic 可以节省这些虽然
很小但是不必要额外开销,在 iOS 开发中应该使用 nonatomic 替代 atomic.

八、如何让自定义类可以用 copy 修饰符?如何重写带 copy 关键字的 setter?

   若想令自己所写的对象具有拷贝功能,则需实现 NSCopying 协议。如果自定义的对象分为可变版本与不可变版本,那么就要同时实现 NSCopyiogNSMutableCopying 协议,不过一般没什么必要,实现 NSCopying 协议就够了

对于属性关键字的总结,暂时先整理这么多,如果有一些问题,希望同学问及时提出来,我们的老师会第一时间为你们解答的。

精华推荐:
黑马程序员:为苹果与iOS开发者的前景正名
与君共勉 --- 记黑马22期同学成长经验。
【持续更新】2016年最全最新的iOS视频+软件+源码+面试/技术
关于iOS 10最新的课程视频及demo第三弹,火速发布了

作者: lvdong22    时间: 2016-5-12 23:15
看中了一部分,没记全,用的时候再记
作者: Simpon    时间: 2016-5-13 09:19
lvdong22 发表于 2016-5-12 23:15
看中了一部分,没记全,用的时候再记

多实践就好了
作者: 18316761642    时间: 2016-5-13 16:16
iOS技术分享】关于属性关键字,你又知道多少?(下)
作者: huangyihan1988    时间: 2016-5-13 21:38
好厉害好厉害好厉害
作者: suhang    时间: 2016-5-15 21:32
谢谢楼主
作者: luffy99    时间: 2016-5-17 13:52
楼主强强强
作者: 1871037345    时间: 2016-5-18 17:16
这个真是太好了,偷偷的留下了  
作者: Simpon    时间: 2016-5-18 17:42
1871037345 发表于 2016-5-18 17:16
这个真是太好了,偷偷的留下了

那你一定悄悄的 大声告诉别人啊
作者: huzhiqiang    时间: 2016-5-18 20:55
还没有学到哪里,先预习预习```
作者: heima_heimahaha    时间: 2016-5-20 20:55
学习学习
作者: heima_heimahaha    时间: 2016-5-20 20:57
@property是干什么的。
作者: zyp1343832    时间: 2016-5-27 16:47
继续看下文,学习下
作者: 1937362521    时间: 2016-5-27 18:11
哈哈哈哈哈哈哈哈哈哈哈哈哈
作者: 云飘雾散    时间: 2016-6-13 21:18
谢谢分享
作者: wodetaoshu    时间: 2016-6-19 13:58
如获至宝,非常感谢
作者: gdutyong    时间: 2016-7-19 16:09
66666666666
作者: 13453650568    时间: 2016-7-19 17:01
只是来学习的
作者: CalvinCheung    时间: 2016-9-20 11:09
学习一下
作者: 有无相生    时间: 2016-11-7 10:03
厉害了 我的鸽
作者: HuyaRC    时间: 2016-11-7 10:41
收藏收藏收藏收藏收藏收藏收藏收藏
作者: newu    时间: 2016-11-7 13:49
谢谢楼主,支持分享

作者: SmallOrange    时间: 2016-11-22 18:02
为什么要隐藏啊???????????????
作者: weiboyuan    时间: 2016-11-23 11:02
looklooklook
作者: geniuswen    时间: 2016-12-1 17:16
学习了学习了学习了
作者: 妍飞凤舞    时间: 2016-12-6 18:09

好厉害好厉害好厉害
作者: floating_dream    时间: 2016-12-9 11:42
iOS计数分享,关于属性关键字
作者: 赫连    时间: 2016-12-9 23:31
感谢黑马,黑马太无私了,学习学习再学习
作者: awenlovelearn    时间: 2016-12-28 18:14
为什么每一个都要回复呜呜
作者: jin_1102    时间: 2016-12-29 16:49
我要学习一下!
作者: 我狂者    时间: 2017-2-17 17:34
真的很棒 受教了
作者: Hzming    时间: 2017-3-6 14:38
回复可见!~
作者: 森林水滴    时间: 2017-3-7 20:40
感谢分享
作者: 664095924    时间: 2017-4-3 19:39
很好,学习了
作者: misscxuan    时间: 2017-4-11 20:40
关于属性关键字,你又知道多少?
作者: JLX    时间: 2017-5-4 16:28
-------------------------------------------
作者: 18150091472    时间: 2017-5-11 16:20
为了学习而来~
作者: ZakZhou    时间: 2017-5-24 09:40
哈哈哈哈哈哈,上一篇我看了
作者: Chris_Wu    时间: 2017-5-27 15:58
戳开看看
作者: yakeracles    时间: 2017-7-3 17:45

谢谢楼主分享
作者: Minecode    时间: 2017-7-25 14:00
MARK: -收藏了
作者: janyjany    时间: 2017-9-14 00:05
好的 阿达是的啊啊啊啊啊啊啊啊啊
作者: janyjany    时间: 2017-9-14 00:06
很滑的萨达大厦大打算打打
作者: 茶无此名    时间: 2017-9-14 15:30
学习学习
作者: magicqqwe    时间: 2017-11-30 16:37
前来看看,巩固下基本知识点,都快忘了

作者: 苏明明    时间: 2018-2-22 15:05
好的哟,这个要学学的
作者: luodongdong    时间: 2018-4-10 17:40
学习一下
作者: wolfhous    时间: 2018-4-11 15:06
1234567876543
作者: hughhh    时间: 2018-4-25 10:34
123465456444
作者: baby14    时间: 2018-7-16 07:47
多谢分享
作者: 金木花    时间: 2019-4-18 00:51
感谢分享
作者: zhangyuze    时间: 2021-8-24 10:08
{:5_228:




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2