を割り当てる正しい方法を知りたいと思いましたNSMutableArray
。
NSMutableArray *a;
ここで、aはクラスレベルの変数です。
最初の方法は次のとおりです。
self.a = [NSMutableArray alloc] init];
2番目の方法は次のとおりです。
a = [NSMutableArray alloc] init];
どちらの方法が良いですか?誰かがこれで私を助けてくれますか?
を割り当てる正しい方法を知りたいと思いましたNSMutableArray
。
NSMutableArray *a;
ここで、aはクラスレベルの変数です。
最初の方法は次のとおりです。
self.a = [NSMutableArray alloc] init];
2番目の方法は次のとおりです。
a = [NSMutableArray alloc] init];
どちらの方法が良いですか?誰かがこれで私を助けてくれますか?
物件の種類によって異なります。(ほとんどの場合は保持されますが) temp 値を使用するか、1 つの文字列で作成して autorelease メッセージを送信する必要があります。プロパティによって保持カウントが 1 つ増えるため、自動解放を送信する必要があります。これは、次のことと同じです。
[self setA:array];//where array - is newly created array
どこ:
- (void)setA:(NSMutableArray *)array {
if (array != a) {
[a release];
a = [array retain];//here you increased a retain count by 1
}
}
作成の autorelease メソッドを使用することもできます。
self.a = [NSMutableArray array];
a がクラス変数の場合、正しい割り当て方法はNSMutableArray
、一時配列を作成してクラス変数に割り当てた後、一時変数を解放することです。
次の方法で実行できます。
NSMutableArray *temp = [[NSMutableArray alloc]init];
self.a = temp;
[temp release];
最新のオブジェクティブ C 構文を使用すると、変更可能な配列と変更不可能な配列を非常に迅速に作成できます。
次の 2 つの例は、これを示しています。
NSArray *objectsToAdd = [@"Ted", @"Ned" , @"Sed"];
NSMutableArray *objectsToAdd = [ @[@"Ted", @"Ned" , @"Sed"] mutableCopy ];
いくつかの方法があります。しかし、ARC/非ARCを使用しているかどうかにかかわらず、以下の方法で十分です。プロパティを作成したことを確認してください。
self.a = [NSMutableArray array];//It will return autorelease object.
メソッドの違い:
1) self.a を使用する場合、@synthesize で作成された setter および getter メソッドを使用します。
2) a だけを使用する場合は、アクセサー メソッドをバイパスし、インスタンス変数を直接変更します。(ここにある)。
それを見るには2つの方法があります。
多くのプログラマーは、不要なオーバーヘッドが追加されるため、オブジェクトの実装内からアクセサーを呼び出すべきではないと言っています。
他の人は、常にアクセサーを使用し、インスタンス変数に直接アクセスしてはいけないと言う人もいます。
値のみを読み取る場合は、通常、オブジェクトを直接使用しても安全です。オブジェクトを変更する場合は、アクセサーを使用して、そのプロパティを監視している他のオブジェクトに適切に通知されるようにする必要があります。
NSMutableArray *a = [[NSMutableArray alloc] init];