Xcode 4.2とARCを使用すると、NSManagedObject
の自動生成されたコードは、プロパティに対して次のようになります。
@property (nonatomic, retain) NSString * someString;
1)retain
をstrong
またはweak
に置き換えるべきではありませんか?
2)自動生成されたコードがまだretain
を使用するのはなぜですか
3)このプロパティステートメントのretain
の正しい置換は何ですか?
現在、NSFetchRequest
を使用して問題をデバッグしていますが、これが問題の原因である可能性があると考えました。考え?
1)今保持する必要があります強いまたは弱いと交換してください。
いいえ。retainをweakに置き換えることはできません。彼らは違う。そして、強いというのは、保持の100%の同義語です。それらは同一です。どちらでも使用できますので、ここには「すべき」はありません。必要に応じて、retainをstrongに置き換えることができますが、その必要はありません。
2)自動生成されたコードが保持を使用するのはなぜですか
何故なの? (1)を参照してください。保持は正しいため、問題はありません。
3)このプロパティステートメントで保持するための正しい代替品は何ですか?
保持を交換する必要はありません。
現在、NSFetchRequestを使用して問題をデバッグしていますが、これが問題の原因であると考えました。考え?
そうではありません。
3つの質問すべてを1つに答えるには、retain
とstrong
は互いに同義であるため、両方とも正しいです。 ドキュメント 状態
retain
は__strong
所有権を意味します
strong
は__strong
所有権を意味します
ARCの前に、保持されているオブジェクトを「リリース」する必要があります。つまり、保持にはカウンターパートがあります。 ARCの後、リリースする必要はありません。強いを使用してください。リリースを呼び出す必要がない視覚的な手がかり。
「保持」は「強力」に等しい。
たとえば、「strong」が使用されます。
@property (nonatomic, strong) NSString * someString;
また、たとえば「__strong」が使用されます。
-(void) someMethod
{
__strong NSString* vStr = [[NSString alloc] initWithString:@"some string"];
}
On Apple Docs。は言う:
プロパティ属性
キーワードweakおよびstrongは、次の例に示すように、新しい宣言されたプロパティ属性として導入されています。
// The following declaration is a synonym for: @property(retain) MyClass *myObject;
property(strong) MyClass *myObject;
Appleのドキュメント。 http://developer.Apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html