您可以发布更多代码吗?我尝试了以下方法:
// Foo.h
#import <Foundation/Foundation.h>
@interface Foo : NSObject
@property (nonatomic, strong) NSString *property1;
@property (nonatomic, strong) NSString *property2;
@end
和
// Foo.m
#import "Foo.h"
@implementation Foo
- (id)init
{
self = [super init];
if (self)
{
_property1 = nil;
_property2 = nil;
}
return self;
}
- (void)dealloc
{
NSLog(@"%s Foo is being dealloced!", __FUNCTION__);
[_property1 release];
[_property2 release];
[super dealloc];
}
@end
当我从我的视图控制器中使用它时,它就像一个冠军,例如:
// ViewController.m
#import "ViewController.h"
#import "Foo.h"
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
Foo *foo = [[Foo alloc] init];
foo.property1 = [NSString stringWithFormat:@"My name is %@", @"Rob"];
foo.property2 = [NSString stringWithFormat:@"My age is %d", 29];
[foo release];
}
@end
我在 Xcode 4.5.1 中做了这个测试。也许您可以(a)确认这对您有用;(b) 验证上述代码与您的代码之间的差异,以诊断问题的根源。
很明显,问题不是由您的定义引起的Foo
,而可能是您的其他类如何创建并最终释放您的Foo
对象的结果。你要么在dealloc
某个地方打电话,要么更有可能,你刚刚过度发布(一个没有相应alloc
or的发布retain
)。
顺便说一句,我建议通过静态分析器运行您的代码(在“产品”菜单上选择“分析”,或按shift+ command+ B)。分析器不应生成任何警告。静态分析器非常擅长发现各种可能困扰非 ARC 代码的基本内存管理问题。