透彻了解属性的里里外外

属性和实例变量不一样。
以下划线开头的变量其实不是属性,而是一种叫做合成的实例变量的东西。它的作用是与局部变量区分开来。
属性是由实例变量实现,然后再由编译器合成的。
因为属性和合成实例变量都是由实例变量实现的,所以它俩都能访问实例变量。

通常我认为使用合成的实例变量就是在使用属性,其实不然。
访问属性需要使用点语法,即self.property。
并且这样写会自动调用属性的accessor。

合成实例变量的名字是可以改变的,不一定非要是以下划线开头的那种。
如下所示:

@interface ViewController ()
@property (strong, nonatomic) NSString *someString;
@end

@implementation ViewController
@synthesize someString = otherString;
@end

动态属性
就是使用@dynamic关键字,相对于静态@synthesize属性,它可以在运行时生成accessor。
不过作者给出的代码写起来有点多,反正我是没见过有在程序里面使用@dynamic,等我用到的时候再说的吧,我姑且先记下来。

更改属性
可以通过扩展来改变,类扩展其实就是在.m中声明私有属性的地方。不过这种修改具有局限性,即,只能在扩展的实现里面才有效。我个人感觉没啥意思。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容