Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

介绍下NSZone #5

Open
tbfungeek opened this issue Jan 4, 2020 · 0 comments
Open

介绍下NSZone #5

tbfungeek opened this issue Jan 4, 2020 · 0 comments

Comments

@tbfungeek
Copy link
Owner

tbfungeek commented Jan 4, 2020

  • NSZone实际上是一个内存池,alloc或是dealloc这些操作都是在这个内存池中完成的。它不是一个对象,而是使用C结构体存储了关于对象的内存管理的信息。基本上开发者是不需要去理会这个东西的,

  • cocoa Application使用一个系统默认的NSZone来对应用的对象进行管理。

  • 那么在什么时候我们会需要有一个自己控制的NSZone呢?当默认的NSZone里面管理了大量的对象的时候。这种时候,大量对象的释放可能会导致内存严重碎片化,cocoa本身有做过优化,每次alloc的时候会试图去填满内存的空隙,但是这样做的话时间的开销很大。这时候,我们可以自己创建一个NSZone,这样当你有大量的alloc请求的时候就全部转移到指定的NSZone里面去,减少了大量的时间开销。而且,使用NSZone还可以一口气把你创建的zone里面的东西都清除掉,省掉了大量的时间去一个个dealloc对象。总的来说,当你需要创建大量的对象的时候,使用NSZone还是能节省一些时间的,不过前提是你得知道怎么去用它。

  • allocWithZone不被Apple鼓励使用,基本上多数时候程序员也不需要自己去管理自己的zone

4374748-b0abace813671588

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant