0

私のコードで:

    ABNewPersonViewController *c = [[ABNewPersonViewController alloc] init];
    [c setNewPersonViewDelegate:self];
    [c setDisplayedPerson:newPerson];
    CFRelease(newPerson);


    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:c];
    [self presentModalViewController:nc animated:YES];

放棄された記憶であると思われるいくつかの場所で、私は楽器を検出しました。理由はありますか?

4

2 に答える 2

0

CFRelease を削除してみて、UINavigationController を ivar にしてください。これは、特定のクラスの割り当てが解除されるまで、ARC がナビゲーション コントローラーをメモリ内に保持することを認識する方法です。

ABNewPersonViewController *personViewController = [[ABNewPersonViewController alloc] init];
[personViewController setNewPersonViewDelegate:self];
[personViewController setDisplayedPerson:newPerson];

//this line is not required
//CFRelease(newPerson); 

//UINavigationController *personNavigationController; define nc as ivar in the .h file.
personNavigationController = [[UINavigationController alloc] initWithRootViewController:personViewController];
[self presentModalViewController:personNavigationController animated:YES];

また、Apple の命名規則に従う場合、コードの読みやすさは間違いなく優れています。

于 2013-01-24T11:32:42.223 に答える
0

リリース c. ncに保持されています

于 2013-01-24T11:08:46.433 に答える