Ric*_*alt 8 synthesis properties objective-c
我对Objective C很新.(现在两天).在阅读时@synthesize,它似乎与我的理解重叠@property(我以为我理解了)......所以,有些细节需要在我脑海中消失......这让我烦恼.
请纠正我,如果我错了有关性别差异@property和@synthesize:
如果要声明@property在你的@interface,那么你就告诉世界,用户可以期望使用标准的getter和setter该属性.此外,XCode将为您制作通用的getter和setter. ......但是,对于没有什么程度是与@财产申报情况?(IE的意思是"完全"......就像你在你的看不见的声明@interface,以及你看不见的代码@interface?
-要么-
是否只处理@property您看不见的代码声明@interface- 而@synthesize在您的@implementation部分中处理看不见的代码实现?)
Rob*_*ier 16
首先,请注意最新版本的Xcode不再需要@synthesize.你可以(而且应该)省略它.也就是说,这就是作品的作用.
@property是访问者的声明.这只是一个宣言.以下几点差别很小:
@property (nonatomic, readwrite, strong) NSString *something;
Run Code Online (Sandbox Code Playgroud)
与
- (NSString *)something;
- (void)setSomething:(NSString)aSomething;
Run Code Online (Sandbox Code Playgroud)
主要区别在于使用这些方法声明这些方法@property可让编译器自动为您生成(综合)实现.您无需让编译器为您执行此操作.你是绝对自由的实现something,并setSomething:通过手,是很常见的事.但是,如果您不手动实现它们,编译器将自动为您调用ivar _something并为getter和setter创建合理的实现.
在旧版本的Xcode中,您必须使用@synthesize关键字明确请求自动生成.但这不再是必需的.今天,使用的唯一理由@synthesize是,如果您希望ivar具有非标准名称(从不这样做).
这里的一个关键点是,这些方法something和setSomething:是刚刚方法.他们没有什么神奇之处.它们不是特殊的"财产方法".它们只是按照惯例访问一个州的方法.这片状态通常存储在一个静脉注射中,但不一定存在.
为了更加明确:object.something不不意味着"返回名为伊娃_something的object." 它意味着"返回结果[object something],不管是什么." 通常会返回ivar的值.
您应该使用声明声明所有状态(内部和外部)@property,并且应该避免直接声明ivars.self.something除了init和dealloc方法之外,您还应始终通过其访问者()访问您的属性.在init和中dealloc,您应该直接使用ivar(_something).
@property 使用您提供的任何原子性和setter语义在您的类上声明一个属性.
使用Xcode 4.4,可以进行自动合成,其中为您提供了来自您的财产的支持ivar,而没有声明它@synthesize.这个ivar具有_propertyName您的属性名称的形式propertyName.
| 归档时间: |
|
| 查看次数: |
6407 次 |
| 最近记录: |