iOS:属性关键字 – 2

随笔3个月前发布 晚安
29 0 0

1、属性关键字有哪些?
答:
属性关键字是用于修饰 Objective-C 类的属性的标识符,
常见的属性关键字包括 strong、weak、copy、retain、assign、readonly、readwrite、nonatomic、atomic 等。

2、weak 和 assign 的区别是什么?
答:
weak 和 assign 都是用来修饰对象的属性,但是它们的行为有所不同。
weak 修饰的属性在引用对象时不会增加对象的引用计数,且在对象被释放后会自动被设置为 nil,避免了野指针的问题。
而 assign 则是简单的赋值操作,不会改变对象的引用计数,也不会在对象释放后自动设置为 nil。
了解更多查看weak知识小结,weak源码分析等。

3、strong 和 retain 的区别是什么?
答:
strong 和 retain 都是用来修饰对象的属性,使得属性可以持有对象的强引用。
它们的作用是相同的,但是 strong 是 ARC(自动引用计数)下的关键字,而 retain 是 MRC(手动引用计数)下的关键字。

4、strong 和 weak 关键字有什么区别?
答:
strong 和 weak 是用来修饰指向对象的指针的。
strong 表示强引用,会增加对象的引用计数,对象不会被释放,直到所有强引用都被释放。
weak 表示弱引用,不会增加对象的引用计数,当对象被释放后,弱引用会自动被设置为 nil,避免了强引用循环问题。
了解更多查看block知识小结,内有更多strong和weak在循环引用中的使用。

5、什么情况下应该使用 copy 关键字?
答:
使用 copy 关键字修饰属性时,会创建对象的一个不可变副本并赋值给属性。
一般情况下,当属性是一个可变对象时,为了避免对象在外部被修改而影响到属性的值,应该使用 copy 关键字。
例如,当属性是 NSString 或 NSArray 等不可变对象时,通常应该使用 copy。
了解更多查看深拷贝和浅拷贝,关于copy一网打尽。

6、copy 和 retain 关键字的区别是什么?
答:
copy 和 retain 都是用来指定内存管理语义的。
copy 会创建一个对象的副本,并将副本赋值给属性,通常用于修饰不可变对象的属性。
retain 会增加对象的引用计数,使得属性持有对象的强引用,对象不会被释放,通常用于修饰可变对象的属性。

7、readonly 和 readwrite 关键字的区别是什么?
答:
readonly 和 readwrite 是用来指定属性的读写权限的。
readonly 表示属性只有 getter 方法,没有 setter 方法,只能读取属性的值;
readwrite 表示属性既有 getter 方法又有 setter 方法,可以读取和设置属性的值。

8、ARC下,不显示指定任何属性关键字时,默认的关键字有哪些?
答:
基本数据类型–默认修饰关键字:atomic,readwrite,assign
对象数据类型–默认修饰关键字:atomic,readwrite,strong

9、NSString为什么要用copy关键字,如果用strong会有什么问题?
(注意:这里没有说用strong就一定不行。使用copy和strong是看情况而定的)
答:
当把NSMutableString赋值给NSString的时候,才会有不同,用copy的话NSString的值不会发生变化,用strong则会发生变化,随着NSMutableString的值变化。
如果是赋值是NSString对象,那么使用copy还是strong,结果都是一样的,因为NSString对象根本就不能改变自身的值,它是不可变的。

10、为什么IBOutlet修饰的UIView也适用weak关键字?
答:
因为既然有外链那么视图在xib或者storyboard中肯定存在,视图已经对它有一个强引用了。

11、如何令自己所写的对象具有拷贝功能?
答:
若想让自己写的对象具有拷贝功能,则需要实现NSCopying协议。如果自定义的对象分为可变版本和非可变版本,那么就要同时实现NSCopying和NSMutableCopying协议,不过一般没什么必要,实现NSCopying协议就够了。
了解更多查看深拷贝和浅拷贝,关于copy一网打尽。

12、可变容器类 和 不可变容器类 copy 和 mutablecopy有什么区别?容器内的元素呢?
答:
容器类本身的深拷贝和浅拷贝规律和 不可变对象/可变对象的深浅拷贝规律一致。
可变对象copy/mutablecopy都是深拷贝,不可变的copy是浅拷贝
copy方法返回的都是不可变对象。
但是容器内的元素是浅拷贝,仅指针复制。
了解更多查看深拷贝和浅拷贝,关于copy一网打尽。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...