免責事項:私はObjective-Cにかなり慣れていません
コマンドライン プロジェクトを使用しています ARC が有効になっていません
MyClass というクラスがあります
@interface MyClass : NSObject
@end
@implementation MyClass
@end
そして私のメインは次のようになります
int main(int argc, char *argv[])
{
MyClass *first = [MyClass new];
MyClass *second = first;
return 0;
}
質問:
*firstの保持カウントが 1 であることはわかっていますが、 *secondの保持カウントも 1 である理由がわかりません。そのオブジェクトに対して新規、保持、割り当て、またはコピーを行っていません。
*firstの保持カウントは 1 であるため、リリースを呼び出す必要がありますか? コードでわかるように、オブジェクトを解放する必要がありますが、パフォーマンス アナライザーはメモリ リークを示しません。なんで?
*firstと*secondのメモリ アドレスの値が同じであることに気付きました。次に、割り当て時に*first保持カウントを 2 に増やす必要があると思います。しかし、そうではありません。なぜですか?
*firstを保持して*secondに割り当てると、両方の保持カウントが 2 になっていることに気付きました (以下を参照)。
int main(int argc, char *argv[]) { MyClass *first = [MyClass new]; [first retain]; MyClass *second = first; return 0; }
基本的に*secondは*firstの COPY になります。その場合、いつリリースされますか?
コードを次のように変更すると、両方のポインターの保持カウントはどうなりますか?
int main(int argc, char *argv[]) { MyClass *first = [MyClass new]; MyClass *second = first; [first retain]; return 0; }
つまり、*秒の保持カウントも増加しますか?
前もって感謝します。