5

非常に大きなプロジェクトの 1 つで、自動合成されたプロパティをあらゆる場所で使用しました。

//MyClass.h file:
@interface MyClass : NSObject

@property (nonatomic, retain) NSString *deviceName;
@property (nonatomic, retain) NSString *deviceID;

@end

//MyClass.m file:
#import "MyClass.h"

@implementation ApplicationStatus
// no @synthesize used at all.

-(void)dealloc{

    [_deviceName release]; // gives errors only while converting to ARC with LLVM 5.0
    [_deviceID release];

    [super dealloc];
}

@end

上記のコードは、非 ARC モードでも、ARC 変換プロセス中の古い Xcode バージョンでも適切にコンパイルされます。最新の LLVM 5.0 コンパイラ (最新の Xcode) を使用して変換しようとすると、何百万ものエラーが発生します。 ここに画像の説明を入力

これの原因は何ですか?何百ものインスタンス変数を手動で作成し、それらを手動で @synthesize する必要がありますか? それは、Apple がすべての WWDC で宣伝した「少ないコードを書く」という哲学から一歩後退したのではないでしょうか?

4

1 に答える 1

1

私はちょうど同じ問題にぶつかりました。

Appleのガイダンスに従って、私は宗教的にself.initでも_内でも使用していinitます。Xcode 5でARCに移行すると、あなたが書いたようにこれが壊れます。

最も簡単な方法は次のとおりです。

@synthesise deviceName = _deviceName;

すべての参照を変更することは、ばかげて、苦痛で、間違っており、読み取り専用の変数の場合、オプションでさえありません。

オートコンプリートは、synthese ステートメントのセットアップにおいて非常にスマートであり、.synthesis でアクセスしようとしているものに対してのみ必要ですinit

于 2013-10-16T13:25:22.987 に答える