私はARCに関連する記事を読んでいました.以下はセクションです:
ARC はまた、Objective-C 言語の命名規則を利用して、返されたオブジェクトの所有権を推測します。Objective-C では、次のプレフィックスのいずれかで統計するメソッド
- 割り当て、
- コピー、
- 可変コピー
- そして新しい
返されたオブジェクトの所有権を呼び出し元に譲渡していると見なされます。つまり、アプリケーションでメソッドを作成すると、自動解放されたオブジェクトを返すか、メソッド名から +1 保持オブジェクトを返すかを ARC が自動的に推測します。ただし、小さな注意点があります。次のように、「copy」で始まるメソッドがあるとします。
-(NSString*) copyRightString;
ARC は、返された文字列の所有権を呼び出し元に譲渡すると想定し、リリースを自動的に挿入します。呼び出されたメソッドと呼び出し元のメソッドの両方が ARC を使用してコンパイルされている場合、すべてがうまく機能します。
しかし、「copyRightString」メソッドが ARC でコンパイルされていないサード パーティのライブラリにある場合、返された文字列を過度に解放することになります。これは、呼び出し元のコードで、ARC コンパイラがリリースを挿入して、「コピー」メソッドによって増加した保持カウントのバランスを取るためです。
逆に、サード パーティのライブラリが ARC でコンパイルされていて、メソッドがそうでない場合、メモリ リークが発生します。
ここで 2 つの質問があります。メソッドの名前がcopyで始まるため、ARCが処理するオブジェクトを解放するメソッドを呼び出す責任があります。
2. サード パーティのライブラリが ARC でコンパイルされていて、メソッドがそうでない場合、メモリ リークが発生するのはなぜですか?メソッド名がコピーで始まるので、コードをリリースします。
私は明確であることを願っています!