Objective-CコマンドラインおよびiOSプログラム用の Xcode 4.x テンプレートが@autoreleasepool {}
パーツ ラッピングmain()
のコードを追加するのはなぜですか? これは、 OS Xアプリケーション テンプレートでは発生しないことに注意してください。
OS X アプリケーションが同じことをしないのはなぜですか? 両方が同じ方法を使用しないのはなぜですか?
最後に、プログラムが終了するとすべてのメモリが解放されるのに、なぜこれらすべてが実際に重要なのでしょうか?
あるいは別の言い方をすれば、コマンド ラインやiOSのObjective-C プログラム@autoreleasepool { ... }
で inを省略すると、実際にはどのような結果になるのでしょうか?main()
これら 2 つのコードはコンパイルされ、同等に動作するように見えます。
1.
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSArray *array = @[@"Hello, world!"];
NSLog(@"%@", array[0]);
}
return 0;
}
2.
int main(int argc, const char * argv[])
{
NSArray *array = @[@"Hello, world!"];
NSLog(@"%@", array[0]);
}
注意してください、私は ARC コンテキストでの説明のみを気にします。ARC は、 の明示的な使用を禁止していますautorelease
。