1

直接割り当てて、ARCでivarを初期化できるかどうか疑問に思っていました(よく覚えていれば、メモリがリークするため、ARCなしでは不可能だったためです)?

例(このように宣言されたivarを考えてみてください):

@property (nonatomic, strong) NSArray *myArray;

@synthetize myArray = _myArray;

そして、

self.myArray = [[NSArray alloc] initWithObjects:object1, object2, nil]; //I know I could directly use [NSArray arrayWithObjects:...] but that's the purpose of my question 
4

3 に答える 3

3

はい。

alloc/initWithObjects:を使用する場合と使用する場合の唯一の違いarrayWithObjects:は、前者は保持されたオブジェクトを残すのに対し、2 番目は保持しないことです。何らかの理由で前者を使用してプロパティを初期化したい場合はautorelease、リークを避けるために への呼び出しを追加する必要があります。したがって、次のようにします。

self.myArray = [[[NSArray alloc] initWithObjects:foo, bar, nil] autorelease];

ARC を使用すると、コンパイラがそれを追加してくれるので、次のように言うことができます。

self.myArray = [[NSArray alloc] initWithObjects:foo, bar, nil];
于 2012-05-11T14:01:51.633 に答える
0

メソッドでリリースしなかった場合は、そうなりますdealloc。ARC では、ユーザーが割り当てを担当します。このdealloc方法では、ARC を使用してリソースを解放できますがself.ivar=nil(ただし、ARC は既に自動的にそれを行っています)、releaseexplicit という言葉は使用しません。また、ARC では を呼び出すことはできません[super dealloc]

于 2012-05-11T13:59:39.540 に答える
-1

引き続き割り当てて保持することができます。オブジェクトのライフサイクルは同じままです。つまり、reatin カウントが 0 になったときにオブジェクトが解放されます。引き続き dealloc をオーバーライドできます。

ここでARCに関する良い記事を見つけることができます

于 2012-05-11T14:10:39.357 に答える