我是Objective-C和XCode的新手,但很高兴看到XCode 4.4现在为我自动合成了我的属性。我想这意味着我不再需要为我的属性输入@synthesize,并且我可以使用self.propertyName = @"hi";
来访问它们。xcode 4.4中的自动属性如何合成工作?
我想重写一些示例代码,以便我可以更好地理解它,但此代码实现了自定义getter方法。在示例代码中,该属性是手动合成的,如@synthesize managedObjectContext = __managedObjectContext;
。自定义的getter看起来是这样的:
- (NSManagedObjectContext *)managedObjectContext {
if (__managedObjectContext != nil) {
return __managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
__managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return __managedObjectContext;
}
在这个人的代码,我看他只是用他的人工合成的访问器get和set。我想到了我的代码,我可以用self.managedObjectContext
代替__managedObjectContext
,但不能。如果我这样做,我得到一个错误告诉我,我试图分配给readonly
属性。这是有道理的,因为该属性被其他编码器定义为只读。
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
所以,我想讲讲他是如何手动合成他的财产是指,如果他使用了特定的制定者,它可以让他以某种方式设置只读属性。
如果我手动合成属性,就像在我引用的代码中那样,一切都可以回到工作状态,但是这并没有利用新的自动合成。如果我删除readonly
,我可以按预期设置此属性,但我觉得我不明白他为什么只读,所以我敢打赌我在那里打破了一些东西。
那么,我错误使用新的自动合成?如果自动合成不是为我创建的,因为readonly,如何使用setter来设置它?
谢谢
他直接访问伊娃。删除一个“_” – Pochi 2012-08-01 08:56:07