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 です
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 です
オブジェクトにメッセージを送信するrelease
と、オブジェクトは実際にはメモリから削除されません。release メッセージは、参照カウントを 1だけ減らすだけです。参照カウントがゼロの場合、オブジェクトはフリーとしてマークされます。次に、システムはそれをメモリから削除します。この割り当て解除が発生するまで、オブジェクトにアクセスできます。オブジェクトであっても、ポインタに割り当てていない限り、release
オブジェクトポインタはオブジェクトを指してnil
います。
それはあなたがリリースしなかったからだとname
思いcompany
ますdealloc
Profile
releaseは、必ずしもオブジェクトを破棄するわけではありません。保持カウントを 1 減らすだけです。その保持カウントがゼロになった場合にのみ、オブジェクトはdeallocatedになります。したがって、リリースが発生するが、 deallocをトリガーしないため、このコードは機能します。
詳細については、Apple のメモリ管理ガイドを参照してください。