2012-01-03 10 views
13

私は主な機能を起動するためのXcodeの4.2の異なる方法があることに気付きました:Xcode 4.2がNSAutoreleasePoolの代わりにmain.mで@autoreleasepoolを使用するのはなぜですか?

int main(int argc, char *argv[]) 
{ 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, 
           NSStringFromClass([PlistAppDelegate class])); 
    } 
} 

int main(int argc, char *argv[]) { 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = UIApplicationMain(argc, argv, nil, nil); 
    [pool release]; 
    return retVal; 
} 

誰もがこれら二つの違いを知っていますか?

+0

これはARC(http://clang.llvm.org/docs/AutomaticReferenceCounting.html) – bealex

答えて

14

最初のものは、あなたのメモリ管理を処理するためにiOS5以上で実装されているARCを使用しています。

2番目の方法では、自分のメモリを管理し、メイン機能内で発生するすべての自動解放を処理する自動解放プールを作成しています。

だから、iOS5を使用してobj-Cでの新機能でビットを読んだ後のことが表示されます。

@autoreleasepool { 
    //some code 
} 

は最後の1が投げるだろうとの違いと

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
// some code 
[pool release]; 

と同じように動作しますARCのエラー

EDIT

最初のものは、ARCを用いて、またはされていません。

+19

と呼ばれます。@autoreleasepoolはObjective-Cで利用できる新しい種類のステートメントであり、ARCに関係なく使用できます。 [1](http://clang.llvm.org/docs/AutomaticReferenceCounting.html#autoreleasepool)[2](http://stackoverflow.com/questions/7950583/autoreleasepool-without-arc) – albertamg

+6

'@ autoreleasepool'今行く方法です。 Appleの「ARCリリースノートへの移行」から:_この構文は、すべてのObjective-Cモードで利用できます。 'NSAutoReleasePool'クラスを使うよりも効率的です。したがって、 'NSAutoReleasePool'を使用する代わりにそれを採用することをお勧めします._ –

+0

ニース、ありがとうございました! – Foo

関連する問題