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

标签 objective-c properties

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

@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]

值(value)被遗漏了。在格式化程序指向的地址处有 NSDate、NSString 甚至我自己的类实例。

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

当我使用@property (nonatomic,retain,readwrite) 并且从未将此 ivar 重置为另一个值时,这怎么可能?

编辑: 在我为 NSDateFormatter 创建子类之后,我清楚而轻松地看到了制作秋季应用程序的版本。 非常感谢 progrmr!

最佳答案

您写的是 SettingsController 类,但使用的是 SyncProgress 类。是哪个?

如果你正确地 @synthesized @property,你在 init 方法中所做的应该是正确的,假设你 < strong>不要释放属性——或者至少是同一个对象,不管你可能有什么引用——以后,无论是在同一个方法中还是在其他地方。换句话说,不要发布自动发布的项目

FWIW,article that describes the macro说你应该声明

+ (SettingsController *) sharedSettingsController;

我看不到你这样做,你也是吗?

并且您正在使用SyncProgress,而不是SettingsController。假设您也将其声明为单例,您应该对 SyncProgress 执行相同的操作:

+ (SyncProgress *) sharedSyncProgress; 

SyncProgressinit 方法是什么?您是否也在那里设置了 formatter,它甚至有一个吗? 还是您看错了类

关于objective-c - 保留属性指向错误的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7245043/

相关文章:

javascript - 循环对象引用在 JavaScript 中是如何工作的?

iphone - 触摸一个文件 - 更新它的修改时间戳

ios - 核心数据关系映射 : Double Quotes in Value Expression are automatically turned into single quotes

ios - UITableView 动画无法正常工作

Objective-C 属性和内存管理

xcode - 无法将数据存储到类的 var(属性)

.Net 类属性 - 获取访问器 - 多少处理算太多?

iphone - 具有多个父关系的核心数据实体

objective-c - 如何正确设置启用 NSSegmentedControl

java - 访问 Maven 项目中的属性文件