SK9*_*SK9 4 properties interface objective-c
在以下常见样本中,
////
@interface MyObject : NSObject
{
@public
NSString * myString_;
}
@property (assign) NSString * myString;
@end
@implementation MyObject
@synthesize myString = myString_;
@end
////
Run Code Online (Sandbox Code Playgroud)
为什么要myString_在界面中声明?
我问,因为我们仍然可以获取和设置myString使用的实施self.myString,[self myString],self.myString = ...和[self setMyString:...],事实上我们必须相反,如果它被保留.
这是某些人的偏好/惯例问题.默认情况下,执行:
@property (assign) NSString * myString;
Run Code Online (Sandbox Code Playgroud)
...其次是:
@synthesize myString;
Run Code Online (Sandbox Code Playgroud)
......会给你三件事.你可以作为访问的setter方法self.myString = @"newValue"或者[self setMyString:@"newValue"],可以作为访问的getter方法NSString* temp = self.myString或NSString* temp = [self myString],并命名实例变量myString是可以直接在类的内部访问(即不通过getter和setter会)和用于设置并获取属性值,并在内部使用它来支持该属性.
如果您愿意@synthesize myString = someOtherVarName,您仍然可以像以前一样获得setter和getter,但是myString实例变量不是实例变量,而是someOtherVarName用于备份属性,并且不会myString创建任何变量.
那么为什么要使用更详细的语法呢?从未有一个需要你这样做,但有些人喜欢这样做与被声明的属性打交道时,任何情况下,retain或copy.这样做的原因是设置声明的属性retain或copy通过其生成的setter方法将影响正在设置/取消设置的对象的保留计数.通过直接访问实例变量来做同样的事情不会.
因此,通过将实例变量别名化为其他内容,您可以在代码中区分"任何xxx.myString = Y正在修改保留计数的内容,而不执行任何操作someOtherVarName = Y".同样,没有必要这样做,但有些人更喜欢这样做.
| 归档时间: |
|
| 查看次数: |
4734 次 |
| 最近记录: |