2012-03-10 17 views
1

オブジェクトがalloc、copy、またはretainで作成されている場合は、それ以降のリリースが必要です。便利なメソッドで作成されたオブジェクトはオートレリースされます。 しかし、 "="で定義され、メソッドの範囲で使用される一時変数はどうですか?例えば(iOS)一時変数のメモリ管理

NSError *error = nil; 
NSString *tempString = @"foo"; 
int number = otherInt * 32; 
NSUInteger row = [indexPath row]; 
NSArray *sameArrayDifferentPointer = otherArray; 

あるいは

NSArray *sameArrayDifferentPointer = (*NSMutableArray) otherMutableArray; 

私は最後のものは「悪い」ですが、細かいコンパイルし、例外をスローしません知っています。

答えて

1

error,およびrowはオブジェクト(またはオブジェクトへのポインタ)ではないため、解放する必要はなく(実際にはリリースすることもできません)。 (numbererrorがゼロへのポインタである、rowがunsigned int型または長い符号なしのいずれかで、INTである。)

tempStringを自動解放-するライン

NSString *tempString = @"foo"; 

ある

の等価
NSString *tempString = [NSString stringWithString:@"foo"]; 

これを2番目の方法で記述すると、何が起こっているのかが明確になります。同様に、配列は[NSArray arrayWithArray:otherArray]を呼び出すのと同じです。

+0

2番目のケースはどのように優れていますか?変数に定数文字列を代入することは何も問題ありません。 – Caleb

+0

もちろんです。そして、あなたは両方のバージョンの変数に定数文字列を割り当てています。より冗長なものは何が起こっているのかをより明確にします。これは明確にするために役立ちます。しかし、私の声明では、第二のものが「通常より良い」というのはおそらくあまりにも強かったので編集します。 –

+0

完璧です。 Objective-CやCでも一般には非常に新しく、ポインタのコンセプトは依然として私を騙します。ありがとう。 – TijuanaKez

2

But what about temp vars defined with "=" and used in the scope of a method?

同じ規則が適用されます。 alloccopy、またはretainでしたか?指定した例では、alloccopy、またはretainという単一の文字は表示されません。したがって、releaseは必要ありません。