16.说一说iOS中与属性成员相关的坑
来源:互联网 发布:淘宝赔付基金赔付规则 编辑:程序博客网 时间:2024/06/10 03:06
之前在做项目的时候遇到的属性相关的一些坑,当时不求甚解,只要改好就ok,今天忽然看到了曾经遇到的坑的解释,就在这里做一个总结:
1.同时重写属性的get和set方法
在.m中同时重写get和set方法后,总是报错,类似这个样子:
后来我通过加上@synthesize array = _array, 当时并不知道为什么会这样,但今天看了下面这个面试题的回答有了明悟,原文如下:
在有了自动合成属性实例变量之后,@synthesize还有哪些使用场景?
回答这个问题前,我们要搞清楚一个问题,什么情况下不会autosynthesis(自动合成)?(实例变量 = 成员变量 = ivar)
同时重写了setter和getter时
重写了只读属性的getter时
使用了@dynamic时
在 @protocol 中定义的所有属性
在 category 中定义的所有属性
重载的属性
当你在子类中重载了父类中的属性,你必须 使用@synthesize来手动合成ivar。
除了后三条,对其他几个我们可以总结出一个规律:当你想手动管理@property的所有内容时,你就会尝试通过实现@property的所有“存取方法”(the accessor methods)或者使用@dynamic来达到这个目的,这时编译器就会认为你打算手动管理@property,于是编译器就禁用了autosynthesis(自动合成)。
因为有了autosynthesis(自动合成),大部分开发者已经习惯不去手动定义ivar,而是依赖于autosynthesis(自动合成),但是一旦你需要使用ivar,而autosynthesis(自动合成)又失效了,如果不去手动定义ivar,那么你就得借助@synthesize来手动合成ivar。
以上已经说的足够明白,所以上面的错误也可以通过手动声明一个_array的成员变量得到解决。
2.用copy关键字声明NSArray与NSMutableArray属性成员的一些问题:
- 16.说一说iOS中与属性成员相关的坑
- 【转】iOS中属性与成员变量的区别
- IOS中属性与成员变量的区别
- iOS中属性与成员变量的区别
- iOS中属性与成员变量的区别
- iOS中属性与成员变量的区别
- 【转】iOS中属性与成员变量的区别
- iOS中属性与成员变量的区别
- iOS中属性(@proerty)与成员变量的区别
- iOS中属性与成员变量的区别
- iOS中属性与成员变量的区别
- iOS中属性与成员变量的区别
- iOS中属性与成员变量的区别
- iOS中属性与成员变量的区别
- iOS中属性与成员变量的区别
- iOS --- Objective-C中类的成员变量与属性
- iOS中属性与成员变量的区别
- iOS中属性与成员变量的区别
- spring+ehcache 缓存
- java应用技术4
- 谷歌热气球4G网络将开始商用 偏僻地区人能上网
- AngularJS中 ng-select 实例
- 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏
- 16.说一说iOS中与属性成员相关的坑
- linux设备驱动之输入(input)子系统——数据结构与接口介绍
- java应用技术5
- in-memory databases
- 人生如何成为编程大师
- nginx多进程模型之热代码平滑升级
- Android XListView实现原理讲解及分析
- Visual Assist X 10.8.2042.0破解版安装提示
- BigDecimal