cod*_*boy 8 iphone properties objective-c
什么是Objective-C中的属性和实例变量之间的区别.我需要在OOP术语中理解这一点.属性声明只是一个方便的包装器(在实现中使用@synthesize)来访问实例变量吗?
谢谢,
codecowboy.
属性和ivars是两个完全不同的东西.
而实例变量是存储在对象中的变量,因此每个实例都有自己的变量.它通过相对于对象指针/ self的指针添加来引用(对于现代运行时略有间接,但在功能上等效).ivars通常是类的内部,默认情况下只能由类及其后代(@protected)访问.在方法中,它们没有资格可用,否则它们可以(但很少,通常不应该)通过间接访问,例如obj-> ivar.
属性定义了getter和setter(setter是可选的)接口.就是这样.它定义了两个公共方法:
- (TYPE) propname;
- (void) setPropname: (TYPE) newPropname;
Run Code Online (Sandbox Code Playgroud)
这些被定义为方法,就像你声明它们一样,不多也不少.这些方法使用普通语法([obj propname]和[obj setPropname:n]或使用现代点表示法(obj.propname或obj.propname = n)调用.这两个选项在语法上不同,它们的行为相同,您可以使用点表示法,无论方法是使用@property声明还是手动声明,如上所述.
然后,您必须通过自己编写方法,使用@synthesize或动态处理缺少的方法来实现实现中的方法.
属性可以由ivar支持(命名相同或命名不同(我的偏好以避免混淆)),或者它们可能不支持.他们可能将其值存储在其他地方,或者他们可能从其他数据中计算出来.
例如,您可能有:
@property (nonatomic, readonly) NSString* fullname;
Run Code Online (Sandbox Code Playgroud)
然后实现 - (NSString*)fullname以返回firstname和lastname的串联.
| 归档时间: |
|
| 查看次数: |
5424 次 |
| 最近记录: |