web-dev-qa-db-ja.com

ARCを使用した@propertyの定義:強力か保持か?

Xcode 4.2とARCを使用すると、NSManagedObjectの自動生成されたコードは、プロパティに対して次のようになります。

@property (nonatomic, retain) NSString * someString;

1)retainstrongまたはweakに置き換えるべきではありませんか?

2)自動生成されたコードがまだretainを使用するのはなぜですか

3)このプロパティステートメントのretainの正しい置換は何ですか?

現在、NSFetchRequestを使用して問題をデバッグしていますが、これが問題の原因である可能性があると考えました。考え?

80
one09jason

1)今保持する必要があります強いまたは弱いと交換してください。

いいえ。retainをweakに置き換えることはできません。彼らは違う。そして、強いというのは、保持の100%の同義語です。それらは同一です。どちらでも使用できますので、ここには「すべき」はありません。必要に応じて、retainをstrongに置き換えることができますが、その必要はありません。

2)自動生成されたコードが保持を使用するのはなぜですか

何故なの? (1)を参照してください。保持は正しいため、問題はありません。

3)このプロパティステートメントで保持するための正しい代替品は何ですか?

保持を交換する必要はありません。

現在、NSFetchRequestを使用して問題をデバッグしていますが、これが問題の原因であると考えました。考え?

そうではありません。

110
matt

3つの質問すべてを1つに答えるには、retainstrongは互いに同義であるため、両方とも正しいです。 ドキュメント 状態

retain__strong所有権を意味します

strong__strong所有権を意味します

40
Phlibbo

ARCの前に、保持されているオブジェクトを「リリース」する必要があります。つまり、保持にはカウンターパートがあります。 ARCの後、リリースする必要はありません。強いを使用してください。リリースを呼び出す必要がない視覚的な手がかり。

4
user2488343

「保持」は「強力」に等しい。

たとえば、「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

3
Alex