80

は、私がNSManagedObjectの自動生成されたコードはまだ性質のために、次のように読み込むことに気づく:)ARCを使用した@property定義:strongまたはretain? Xcodeの4.2およびARCを使用して

@property (nonatomic, retain) NSString * someString; 

1ないretainは今strongweakと交換すべきか?

2)なぜ、自動生成されたコードはまだretain

3を使用しない)、このプロパティ文でretainのための適切な交換とは何ですか?

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

+0

今すぐ回答を受け入れる必要があります。 – Rivera

答えて

40

3つの質問すべてに1つの答えを入力する:retainstrongは互いに同義語なので、どちらも正しいです。

retain__strong所有権

strong__strong所有権

+0

お返事ありがとうございます。私はARCのAppleの文書を読んだ。私は保持が強くなることを理解しています。しかし、これは、新しいNSManagedObjectを作成するときにXcodeによって自動的に生成されるコードが@property(非原子的、保持)を与える理由を説明していません – one09jason

+3

ここに何かが見つからない限り、完全に説明しています。 Xcodeが作成するコードは正しいものです。なぜなら、retainはちょうど強力なので、あなたの質問はどこですか? – Phlibbo

+6

プロジェクトでARCリファクタリングを実行すると、それらのすべての 'retain'sが' strong'に変換されます。だから私の印象は、 '強い'が優先属性だが、NSManagedObjectジェネレータは更新されていないということだ。しかし、それはちょうど推測です。おそらくアップルの誰もその区別を重要視していないだろう。 – theory

110

1を暗示暗示The documentation状態)は、強いまたは弱いと交換することになりまし保持されないでしょうか?

いいえretainをweakに置き換えることはできません。それらは違う。そしてstrongは100%の同義語です。彼らは同じです。いずれかを使うことができるので、ここには "should"はありません。もしあなたが好きなら、あなたは強くすることができますが、そうする必要はありません。

2)なぜ、自動生成されたコードはまだ使用

を維持しないのはなぜか? (1)を参照してください。保持が正しいので、問題はありません。

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

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

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

これはありません。

+9

私は、Apple Wayへの標準とコンプライアンスを持っている(とにかく!私は賢くなるために強く変わる。 1つは、半ダースの小さなものの中で、不適切な構文のための大きなプロジェクトを少し簡単にすることです。 –

+12

正確な感情的なアーキテクチャがわからない。あなたは「冷たい明日の明かり」の一例を挙げることができますか? ;-) falseとNOは同義語ですが、Objective-Cでは慣例でNOを使用しています。一貫性のある理由があります。矛盾することは問題ないが、合理性を証明する負担は、それを遵守している慣習ではなく、一つの慣習である。 –

+9

@EricGoldbergには、大事なことを言いますが、大会に関する事項があります。また、コード内の他の場所で '__strong'になるので(' __retain'はありません)、一貫性のために 'strong'を使用したい場合があります。これはコードが一貫してコードをインデントするのと似ていますが、コードはこれがなくてもうまく動作します。 –

4

ARCの前に、保持されているオブジェクトを 'リリース'する必要があります。その保持には対抗する部分があります。 ARC後、あなたは解放する必要はありません。だから強く使う。そのリリースを呼び出す必要はありません視覚的な手掛かり。

3

"retain"は "strong"と等しくなります。"強い" とは、例えば使用されている

@property (nonatomic, strong) NSString * someString; 

そして "__strongは、" 例で使用される:アップルドキュメント上

-(void) someMethod 
{ 
    __strong NSString* vStr = [[NSString alloc] initWithString:@"some string"]; 
} 

。言う:

プロパティは、次の例に示すように弱く、強い

キーワードは、新たに宣言されたプロパティの属性として導入されている属性。

// The following declaration is a synonym for: @property(retain) MyClass *myObject; 
property(strong) MyClass *myObject; 

Apple doc。 http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

関連する問題