現在の iOS プロジェクトを ARC を使用するようにリファクタリングしようとしています。そして、「ARC へのリファクタリング」ツール i xCode を使用して現在のコードを ARC に移行するための変更をプレビューした後、現在のコード規則がおそらく ARC に適していないことがわかります。それは私のivarに__weak / __strongなどをたくさん追加するからです。
私の現在の慣例は次のとおりです。
すべてのインスタンス変数をプライベートまたは保護された ivar として定義します。@property を作成するすべてのパブリック変数。
@interface TestClass
{
@private
NSMutableArray* mArray;
NSString* mString;
BOOL mMyBoolean;
}
@property (retain, nonatomic) NSString* string; // public
@end
リリース/保持の処理を避けるために、すべてのオブジェクトは常に@propertyに戻ります。そのため、参照であるプライベート変数がある場合は、実装でカテゴリを作成するだけです。Struct (mMyBoolean のような) Ivar として定義したままにします。
@interface TestClass()
@property (retain, nonatomic) NSmutableArray* mArray;
@end
@implementation TestClass
@synthesize string = mString;
@synthesize mArray;
@end;
しかし、新しい ARC が保持/解放を処理しているため、@property によってバックアップされるプライベート変数は必要ありません。
では、どのコード規則がより適切でしょうか? 次のように、インターフェイスでプロパティを定義することだけを考えていました。
@interface TestClass
{
@private
NSMutableArray* mArray;
BOOL myBoolean;
}
@property (strong, nonatomic) NSString* string;
@end
@implementation TestClass
@synthesize string;
@end
また、プライベート プロパティにカテゴリ プロパティを使用しないでください。(また、「m」プレフィックスを削除しました)、@propertyが使用する必要のある裏打ちされたivarを定義しません。代わりに、xcodeに自動生成された?.