A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Simpon 于 2016-10-27 10:31 编辑


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

一、@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 协议就够了
游客,如果您要查看本帖隐藏内容请回复

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

精华推荐:

52 个回复

正序浏览
{:5_228:
回复 使用道具 举报
感谢分享
回复 使用道具 举报
多谢分享
回复 使用道具 举报
123465456444
回复 使用道具 举报
1234567876543
回复 使用道具 举报
学习一下
回复 使用道具 举报
好的哟,这个要学学的
回复 使用道具 举报
前来看看,巩固下基本知识点,都快忘了
回复 使用道具 举报
学习学习
回复 使用道具 举报
很滑的萨达大厦大打算打打
回复 使用道具 举报
好的 阿达是的啊啊啊啊啊啊啊啊啊
回复 使用道具 举报
MARK: -收藏了
回复 使用道具 举报

谢谢楼主分享
回复 使用道具 举报
戳开看看
回复 使用道具 举报
哈哈哈哈哈哈,上一篇我看了
回复 使用道具 举报
为了学习而来~
回复 使用道具 举报
JLX 初级黑马 2017-5-4 16:28:15
36#
-------------------------------------------
回复 使用道具 举报
关于属性关键字,你又知道多少?
回复 使用道具 举报
很好,学习了
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马