0

オブジェクトを保持/解放しない CFDictionaryRef があります。そこにアイテムを追加すると、それを保持するように注意し、後で:

NSMutableArray *array = (__bridge_transfer NSMutableArray *)CFDictionaryGetValue(...)
[self performSelector:someSelector withObject:array];

someSelector私が知っているセレクターを保持する変数はどこにありますか。さて、その 2 行目は Xcode に悪名高い警告を伝えさせます。

セレクターが不明であるため、PerformSelector はリークを引き起こす可能性があります

arrayこれは、所有権を譲渡したばかりの変数のメモリを管理する方法を ARC が知らないことを心配する必要があるということですか?

4

1 に答える 1

0

この質問の受け入れられた回答へのコメントから、Appleの誰かがこの仮説を確認したようです(回答自体を引用):

実際、メモリ管理が特定の規則によってメソッドの名前に関連付けられている場合があります。具体的には、便利なコンストラクターと make メソッドを考えています。前者は慣例により、自動解放されたオブジェクトを返します。後者は保持されたオブジェクトです。規則はセレクターの名前に基づいているため、コンパイラーがセレクターを認識していない場合、適切なメモリー管理ルールを適用できません。

したがって、呼び出しに渡された引数のリークの可能性とは何の関係もありませんが、performSelector:Objective-C が自動解放されたかどうかを知る方法がないその戻り値とは関係ありません。これは、コメントのMartin Rが想定していたことでもあります。

于 2013-05-30T17:09:29.563 に答える