Objective c @财产问题-目标C
我的财产有问题。首先,我定义它:Objective c @财产问题-目标C,objective-c,cocoa,boolean,Objective C,Cocoa,Boolean,我的财产有问题。首先,我定义它: @property (readwrite) BOOL isPerformingOperation; 然后将其合成: @synthesize isPerformingOperation; 然后我将属性设置为: self.isPerformingOperation=YES 为了确保我做对了事情,我记录: NSLog(@"class perform is %i",self.isPerformingOperation); 。。。它按预期返回1 但是我需要从另一个类
@property (readwrite) BOOL isPerformingOperation;
然后将其合成:
@synthesize isPerformingOperation;
然后我将属性设置为:
self.isPerformingOperation=YES代码>
为了确保我做对了事情,我记录:
NSLog(@"class perform is %i",self.isPerformingOperation);
。。。它按预期返回1
但是我需要从另一个类读取属性-DAUpdatingView
,因此我从添加属性的类导入头文件,并尝试两种获取值的方法,这两种方法都始终返回0,即使在原始类中将其设置为1
NSLog(@"My Boolean: %d, or %@", [USBBackupAppDelegate sharedInstance].isPerformingOperation, [USBBackupAppDelegate sharedInstance].isPerformingOperation ? @"Yes" : @"No");
这是控制台输出:
2010-10-12 19:32:11.381 USBBackup[3329:a0f] class perform is 1
2010-10-12 19:32:15.330 USBBackup[3329:a0f] My Boolean: 0, or No
正如您所看到的,属性来自的主类已按预期更改了值,但另一个类没有读取该值。我错过了什么
编辑:
是,我正在使用原始类的共享实例:
static USBBackupAppDelegate *sharedInstance = nil;
+ (USBBackupAppDelegate *)sharedInstance
{
return sharedInstance ? sharedInstance : [[self alloc] init];
}
属性是每个实例的,不在对象之间共享。阅读此问题的答案以查看实现所需功能的代码
好吧,USBBackupAppDelegate*app=[[USBBackupAppDelegate alloc]init]代码>创建一个新的对象实例。在新实例中,属性尚未设置为“是”
+ (USBBackupAppDelegate *)sharedInstance
{
return sharedInstance ? sharedInstance : [[self alloc] init];
}
那不行;每次调用sharedInstance
,您都在创建一个新实例(假设sharedInstance
为nil)
当然,除非您在init
中设置了sharedInstance
,这将是一个非常奇怪的模式。true,但是共享原始实例的sharedInstance仍然返回相同的结果:/我已经做到了-我使用+sharedInstance来实现这一点。结果仍然相同。sharedInstance与您分配的对象不同。在sharedInstance消息中,sharedInstance变量是什么?它是如何声明的?它是如何变为非零的?如果在标头中声明为实例变量,则实例之间不会共享该变量。您需要在sharedInstance消息中创建一个本地静态。如果您分配另一个对象,则该对象不是共享的。类引用该类型,该类的每个运行时实例称为对象。问题的最后一句应该是“设置属性的主对象具有更改的值,但另一个对象具有其默认值”——每个对象都有自己的所有属性副本,因此,一旦您理解了类和对象之间的区别,您就可以看到问题所在。我有一个NSView的类&一个子类-USBBackupDelegate&dauptatingview-我想从dauptatingview子类中的USBBackupDelegate类中获取属性。我忘记了它的init实现,因此它不起作用。现在可以了,谢谢!是的,它一直是这样的,这意味着消息总是返回一个新的对象,而这个对象不是共享的。苹果官方认可的编写单例的方法是在-allocWithZone:
中设置它。为什么?嗯,我想你比我更清楚。:-)