0
 Profile *myProfile= [[Profile alloc]init];

[myProfile setName:@"Jhon Applesead"];
[myProfile setCompany:@"Apple"];

[myProfile release];

NSLog(@"Name is %@", [myProfile name]);

ログは

2013-02-28 15:41:36.866 練習[8124:303] 名前は Jhon Applesead です

4

3 に答える 3

3

オブジェクトにメッセージを送信するreleaseと、オブジェクトは実際にはメモリから削除されません。release メッセージは、参照カウントを 1だけ減らすだけです。参照カウントがゼロの場合、オブジェクトはフリーとしてマークされます。次に、システムはそれをメモリから削除します。この割り当て解除が発生するまで、オブジェクトにアクセスできます。オブジェクトであっても、ポインタに割り当てていない限り、releaseオブジェクトポインタはオブジェクトを指してnilいます。

于 2013-02-28T10:29:44.797 に答える
1

それはあなたがリリースしなかったからだとname思いcompanyますdeallocProfile

于 2013-02-28T10:28:12.710 に答える
1

releaseは、必ずしもオブジェクトを破棄するわけではありません。保持カウントを 1 減らすだけです。その保持カウントがゼロになった場合にのみ、オブジェクトはdeallocatedになります。したがって、リリースが発生するが、 deallocをトリガーしないため、このコードは機能します。

詳細については、Apple のメモリ管理ガイドを参照してください。

于 2013-02-28T10:29:59.050 に答える