objective-c - 既然设置了ARC,为什么还要使用@autoreleasepool
巴扎黑
巴扎黑 2017-04-24 09:10:51
0
2
435

1、既然设置了ARC,为什么还需要@autoreleasepool,有什么好处?
池子做的是运行时延迟释放,ARC已经在编译时解决了手动管理的问题,那么就没必要使用@autoreleasepool,还占内存。
2、ARC频繁释放内存 和@autoreleasepool一起释放 感觉还是前者 要好些,
这不是像数据连接池一样可以共享资源。只是延迟释放内存(又不能共享内存)。

按着这个推论在ARC条件下,没必要使用@autoreleasepool。

我知道这种想法有问题,但是不知道是哪里,新手问题多,莫喷

巴扎黑
巴扎黑

全員に返信(2)
左手右手慢动作

ARC は @autoreleasepool を放​​棄しませんが、コンパイル段階で必要な retain/release/autorelease> を挿入するのに役立ちます。コード>コード呼び出し。 @autoreleasepool,而是在编译阶段帮你插入必要的 retain/release/autorelease 的代码调用。

所以,跟你想象的不一样,ARC 之下依然是延时释放的,依然是依赖于 NSAutoreleasePool

つまり、皆さんが考えているのとは異なり、ARC はまだリリースが遅れており、依然として NSAutoreleasePool に依存しています。これは、非 ARC モードでこれらの関数を手動で呼び出すことと本質的には同じです。これは単にコンパイルするだけです。参照カウントが正確であることを確認します。

参考:
  • ARC でカウント セマンティクスを保持する
  • @autoreleasepool とは
🎜
いいねを押す +0
迷茫

@autoreleasepool を使用すると便利です。
通常の状況では、作成した変数はスコープを超えると解放されます。
そして、関数が非常に長く、関数の実行中に多くの中間変数が表示され、大量のメモリを占有している場合は、どうすればよいでしょうか?
@autoreleasepool を使用します。
@autoreleasepoolで作成した変数は@autoreleasepool終了時に一旦解放されます。実際、 @autoreleasepool はスコープのレイヤーに相当します。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート