0

非常に単純なコードでメモリ リークの問題に直面しています。クラス 'TestClass' があります。

@interface TestClass : NSObject
  @property(nonatomic,retain) NSString *name;
@end

その実装は次のようになります。

@implementation TestClass
@synthesize name;
-(id)init {
    if (self = [super init]) {
        self.name = @"";
    }
    return self;
}
-(void) dealloc
{
    [name release];
    name = nil;
}
@end

viewWillAppear 内に別のビュー コントローラーがあり、次のようにオブジェクトを作成してすぐに解放しています

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    for (int i =0; i<50; i++) {
        TestClass *testClass = [[TestClass alloc] init] ;
        [testClass release];

    }
}

TestClass *testClass = [[TestClass alloc] init] ;TestClass から init および dealloc メソッドを削除すると、メモリが存在しない場合に、リーク インストゥルメントがオンラインでメモリ リークを示します。

前もって感謝します。

4

2 に答える 2

3

これは、deallocの独自の実装のdeallocでTestClassをリリースしないためです。

-(void) dealloc
{
    [name release], name = nil;
    [super dealloc];
}

また、ヒントとして、メモリ管理コードからに移行することをお勧めしARCます。

于 2012-09-11T14:54:10.970 に答える
0

rckoenes は正しいですが、次のことが簡単にできます。

- (void)dealloc
{
    self.name = nil;
    [super dealloc];
}
于 2012-09-11T14:56:26.897 に答える