コードをもっと投稿できますか?私は次のことを試しました:
// 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
また、View Controllerから使用すると、チャンピオンのように機能します。例:
// 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
このテストはXcode4.5.1で行いました。たぶんあなたは(a)これがあなたのために働くことを確認することができます。(b)上記のコードとコードの違いを確認して、問題の原因を診断します。
明らかなことは、問題の原因はの定義でFoo
はなく、おそらく他のクラスがFoo
オブジェクトを作成して最終的に解放する方法の結果であるということです。どこかで電話をかけているdealloc
、またははるかに可能性が高いのは、リリースしすぎていることです(対応するalloc
またはがないリリースretain
)。
ちなみに、静的アナライザーを使用してコードを実行することをお勧めします([製品]メニューの[分析]を選択するか、shift+ command+を押しますB)。アナライザーによって警告が生成されることはありません。静的アナライザは、非ARCコードを悩ませがちなあらゆる種類の基本的なメモリ管理の問題を見つけるのに優れています。