我有一个同步的函数,但似乎我无法直接更改该块中实例变量的值。
+(id)allocWithZone:(NSZone *)zone
{
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [super allocWithZone:zone];
//This is not allowed
something = @"hello";
//This is allowed
self.something = @"hello world!";
return sharedInstance;
}
}
return nil;
}
为什么会这样?我有一个我需要直接访问的变量(我不想合成该变量)。我该如何解决这个问题?
答案 0 :(得分:5)
您无法更改实例变量,因为这不是实例方法。事实上,self
的值是类本身。您的代码行self.something = @"hello world!"
也无效。你真正想要的是sharedInstance.something = @"hello world!"
,这只有在something
属性时才有效。更好的方法是在init方法中设置ivars。
哦,无论如何你在+allocWithZone:
没有设置ivars的业务。该对象尚未初始化。
假设你正在尝试在这里创建一个单例(就像它的样子一样),你可能想在Obj-C中阅读关于单例的blog post。