Objective c 保留指向错误地址的属性

Objective c 保留指向错误地址的属性,objective-c,properties,Objective C,Properties,我有一个名为formatter的ivar单例类。有一些代码: @interface SettingsController : NSObject { NSDateFormatter *formatter; } @property (nonatomic,retain,readwrite) NSDateFormatter *formatter; @implementation SettingsController @synthesize formatter,; SYNTH

我有一个名为formatter的ivar单例类。有一些代码:

@interface SettingsController : NSObject {

    NSDateFormatter *formatter;  
}

@property (nonatomic,retain,readwrite)  NSDateFormatter *formatter;




@implementation SettingsController

@synthesize formatter,;

SYNTHESIZE_SINGLETON_FOR_CLASS(SettingsController);

-(id)init
{
 if ( (self = [super init]) )
  {
        ...
        self.formatter = [[[NSDateFormatter alloc] init] autorelease];
        ...
  }
问题是,当我尝试获取此格式化程序时,如何:

[[SettingsController sharedSettingsController] formatter]
缺少该值。格式化程序指向的地址中有NSDate、NSString甚至我自己的类实例

我尝试使用[[NSDateFormatter alloc]init],但只有[[[NSDateFormatter alloc]init]retain]才能使问题消失

当我使用@property(非原子,retain,readwrite)而从不将这个ivar重置为另一个值时,这怎么可能呢


EDITE:在我为NSDateFormatter创建了子类之后,我清楚而容易地看到了制作秋季应用程序的版本非常感谢progrmr您编写了关于类
设置控制器的内容,但使用的是类
同步进程
。是哪一个

如果您正确地
@合成
@属性
,那么您在显示的
init
方法中所做的应该是正确的,假设您以后没有在相同的方法或其他地方释放该属性,或者至少从对它的任何引用中释放相同的对象。换句话说,不要释放自动释放的项目

FWIW,海关说你应该申报

+ (SettingsController *) sharedSettingsController;
我看不到你这么做,你也是吗

您使用的是
SyncProgress
,而不是
设置控制器。假设您也声明为singleton,那么对于
SyncProgress
,您也应该这样做:

+ (SyncProgress *) sharedSyncProgress; 

SyncProgress
init
方法是什么?您是否也在那里设置了
格式化程序
,它甚至有一个或者您只是查看了错误的类

一定有什么东西正在向您分配的格式化程序发送版本,但我看不到您发布的代码的位置。如果您真的想知道,请创建一个子类NSDateFormatter并用它代替NSDateFormatter,在子类中重写release(确保调用super release),然后在该release函数中设置一个断点以查看调用它的所有位置。嗯…谢谢。将这样做,并张贴结果!