Fei*_*anZ 88
实例变量对于类是唯一的.默认情况下,只有类和子类可以访问它.因此,作为面向对象编程的基本原理,实例变量(ivars)是私有的 - 它们由类封装.
相反,属性是可以与实例变量对应或不对应的公共值.如果你想公开一个ivar,你可能会做一个相应的财产.但与此同时,您希望保密的实例变量没有相应的属性,因此无法从类外部访问它们.您还可以拥有与ivar不对应的计算属性.
没有财产,ivars可以隐藏.实际上,除非在公共标题中声明ivar,否则很难确定存在这样的ivar.
一个简单的比喻就是收缩包装的书.财产可能是title,author或精装与软包."ivars"将是本书的实际内容.在拥有本书之前,您无权访问实际文本; 除非您拥有该课程,否则您无法访问ivars.
// This is not syntactically correct but gets the meaning across
(self.variable) == ([self variable];)
(self.variable = 5;) == ([self setVariable:5];)
Run Code Online (Sandbox Code Playgroud)
对于每个属性,有两种方法(除非声明属性readonly,在这种情况下只有一个):有getter,它返回与ivar相同的类型,并且与ivar同名,以及该设定器(其不与声明readonly的ivar); 它返回void,其名称只是设置在变量名前面.
因为它们是方法,所以您可以对它们进行动态调用.使用NSSelectorFromString()和各种performSelector:方法,您可以制作一个有很多可能性的非常动态的程序.
最后,属性在Core Data和Key-Value Coding中得到广泛使用.Core Data是一个高级框架,用于在SQLite数据库中存储数据,同时提供清晰的Obj-C前端; KVC在整个Core Data中使用,是一种访问属性的动态方式.它在编码/解码对象时使用,例如从XIB读取时.
| 归档时间: |
|
| 查看次数: |
40185 次 |
| 最近记录: |