ios - 保留属性(property)被重新分配

标签 ios memory-management properties retain nszombie

我对 Objective-C 内存管理相当陌生,虽然我认为我理解它,但我有一个我无法设法解决的问题。

我有这个属性:

@property (nonatomic, retain) NSDate *dateDisplayed;

我在 viewDidLoad 中使用自定义方法分配:

self.dateDisplayed = [self dbDateFormatToNsDate:@"15/11/2011"];

我的 dbDateFormatToNsDate 方法如下所示:

- (NSDate *) dbDateFormatToNsDate:(NSString *) date {
    NSDateFormatter *d = [[NSDateFormatter alloc] init];
    [d setDateFormat:@"dd/MM/yyyy"];
    NSDate *toReturn = [d dateFromString:date];
    [d release];
    return toReturn;
}

所以它返回一个自动释放的对象(如果 NSDate 遵循约定)。但是当我从 viewDidLoad 中退出时,在另一个试图读取 dateDisplayed 的函数中:

[dateDisplayed isEqualToDate:[self dbDateFormatToNsDate:@"15/11/2011"]]

我得到一个 NSZombie 异常。感谢您的帮助!

最佳答案

当使用 self.property 赋值时,属性会被保留,因为调用了 setter 方法,但如果只是赋值而不使用 self.,则不会。当然假设您在 .h 文件的属性定义中有 retain


你可以 [d autorelease]; 代替。我可能完全不同意这一点,但是 toReturn NSDate 可能需要保留格式化程序,即使在您发布它之后,也会导致访问错误:

尝试:

- (NSDate *) dbDateFormatToNsDate:(NSString *) date {
    NSDateFormatter *d = [[NSDateFormatter alloc] init];
    [d setDateFormat:@"dd/MM/yyyy"];
    NSDate *toReturn = [d dateFromString:date];
    [d autorelease];
    return toReturn;
}

关于ios - 保留属性(property)被重新分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7682672/

相关文章:

objective-c - iOS 设备上的字体

ios - iOS APP-YouTube视频iOS7

ios - 以编程方式加载 viewController 类

ios - 我应该在每次想要推送时创建一个 UIViewController 吗?

iphone - 两个 Objective-C 内存管理问题 : Is Leak Detection Always Right? 和为什么 autorelease 工作但不释放?

安卓。不同版本 Android 操作系统中的内存管理

c# - 类中的属性与公共(public)声明变量

iphone - 将按钮 super View Controller 添加到另一个 viewController 时无法识别 UIButton 目标

c# - 如何定义一个结构,其成员可以被任何内部类访问但只能由特定(内部)类设置?

c# - 动态设置属性 WPF 应用程序