0

コマンドラインアプリケーションで2つのクラス(FirstClassとSecondClass)を作成しました。FirstClassメソッドでSecondClassのオブジェクトを作成しました。次に、mainでそのメソッドを呼び出し、そのオブジェクトに割り当てられたメモリを解放します。私のコードは次のとおりです。

@implementation FirstClass

+(NSMutableArray *) addObject{
    NSMutableArray *namesArray = [[[NSMutableArray alloc]init] autorelease];
    SecondClass *second = [[SecondClass alloc]init];
    NSLog(@"Before adding object, count = %ld ",[second retainCount]); //RC = 1
    [second setName:@"Mobicule"];
    [namesArray addObject:second];
    NSLog(@"First object addeded, count = %ld ",[second retainCount]); //RC = 2
    [second release];
    NSLog(@"After release, count = %ld",[second retainCount]); //RC = 1
    return namesArray;
}

@end

保持カウントをゼロにしたい。

そして主な機能は以下の通りです。

int main (int argc, const char * argv[]) {

@autoreleasepool {

    // insert code here...
   // NSLog(@"Hello, World!");

    NSMutableArray *arrayMain = [[NSMutableArray alloc]init];

    arrayMain = [FirstClass addObject];

    for (int i = 0; i<[arrayMain count]; i++) {

        NSLog(@"%@",[[arrayMain objectAtIndex:i] name]);
    }

   NSLog(@"%ld",[arrayMain retainCount]);

}
return 0;
}
4

1 に答える 1

0

名前の合成プロパティはretain.

  +(NSMutableArray *) addObject{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    NSMutableArray *namesArray = [[NSMutableArray alloc]init];
    SecondClass *second = [[[SecondClass alloc]init]autorelease];
    NSLog(@"Before adding object, count = %ld ",[second retainCount]); //RC = 1
    [second setName:@"Mobicule"]; //implementation will handle the release for you
    [namesArray addObject:second];
    NSLog(@"First object addeded, count = %ld ",[second retainCount]); //RC = 2
    [pool release];
    NSLog(@"After pool release, count = %ld",[second retainCount]); //RC=1
    return [namesArray autorelease];
}  

-retainCount は決して使用しないでください。有益なことは何もわかりません。

-retainCountを使用する場合をご覧ください。

于 2012-06-26T06:00:30.593 に答える