你能發佈更多的代碼嗎?我試過如下:
// 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
或retain
)。
順便說一句,我建議通過靜態分析儀運行的代碼(選擇「分析」的「產品」菜單上,或按轉變 + 命令 + 乙)。你不應該有任何分析儀產生的警告。靜態分析器非常適合尋找各種困擾非ARC代碼的基本內存管理問題。
來源
2012-10-22 19:37:50
Rob
如果你刪除這兩個屬性釋放它的工作原理? – fbernardo
這是一樣的.. –
沒有更多的信息不能幫助你...你能發佈.h和.m嗎? – fbernardo