NSZone是什么?使用 initWithZone: 有什么优点?

发布于 2024-11-09 08:04:45 字数 246 浏览 0 评论 0原文

有很多函数,例如

1. NSDefaultMallocZone()
2. NSCreateZone();
3. NSRecycleZone();
4. NSSetZoneName();
5. NSZoneMalloc();
and many more related to NSZone

NSZone 是什么意思,在哪里以及何时使用这些函数?
initWithZone: 有什么优点以及如何在我的 iPhone 应用程序中使用?

There are so many functions like

1. NSDefaultMallocZone()
2. NSCreateZone();
3. NSRecycleZone();
4. NSSetZoneName();
5. NSZoneMalloc();
and many more related to NSZone

What does NSZone means, where to use these functions and when?
What are the advantages of initWithZone: and how to use in my iphone app?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

铃予 2024-11-16 08:04:45

NSZone是Apple的优化方式
对象分配和释放。 NS区
不是一个物体;它是不透明的
C 结构体存储有关如何进行的信息
内存应该被处理为一组
对象。

人们很少需要担心
处理你自己的区域
应用程序;可可处理它
透明地。默认 NSZone 是
在启动时创建和所有对象
默认分配在那里。所以
为什么你想使用自己的?

如果您要批量分配数百个
便宜的物品,你可能会发现成本
实际为他们分配空间
变得重要。因为
一直使用标准区,它
可能会变得非常零散;已删除
物体可能会留下尴尬的间隙
整个记忆。分配器为
标准 NSZone 知道这一点,并且它
试图填补这些偏好空白
抓住更多的记忆
系统,但这可能会花费大量时间
如果该区域变得相当大。

如果你想批量分配对象,
然后,您可以创建自己的区域并
告诉它不要费心去寻找
放置新物体的间隙。
分配器现在可以跳到末尾
每次分配的内存和
快速分配内存给你的新
对象,节省大量精力。

分配器可以节省您的时间
其他地方也一样,例如向操作系统询问
区域需要更多内存
每当它填满时,就是另一个
如果操作量大的话,操作成本会很高。
更快的是要求大块
一次记忆,你可以分辨出来
你的 NSZone 在这里也可以做什么。

有传言 NSZone 可以拯救
你在Good Old中的释放时间
日子也一样,用一种简单的方法
丢弃所有分配的内存
无需费心打电话
解除分配器。如果一组对象是
独立的,这样可以节省很多
时间,因为你可以把它们全部扔掉
立即离开,无需繁琐
全部取消分配。唉,有
似乎没有任何迹象表明这是天赐之物
在当前文档中;这
单个 NSZone 方法(NSRecycleZone?)
小心地将所有物体放入一个
区域整齐地位于默认的 NSZone 上。不是
确实节省了大量时间。

因此,总而言之,区域可以节省您的时间
大规模分配。但只有当
程序员知道如何使用它们!

来自 CocoaDev

根据评论编辑:“还需要注意的是,您不能使用如果你使用 ARC,就不再需要 NSZone 了。”

NSZone is Apple's way of optimizing
object allocation and freeing. NSZone
is not an object; it is an opaque
C-struct storing information about how
memory should be handled for a set of
objects.

One rarely needs to worry about
handling your own zones in
applications; Cocoa handles it
transparently. A default NSZone is
created on startup and all objects
default to being allocated there. So
why would you want to use your own?

If you are mass-allocating hundreds of
cheap objects, you may find the cost
of actually allocating space for them
becomes significant. Because the
standard zone is used all the time, it
can become very patchy; deleted
objects can leave awkward gaps
throughout memory. The allocator for
the standard NSZone knows this, and it
tries to fill these gaps in preference
to grabbing more memory off the
system, but this can be costly in time
if the zone has grown quite large.

If you want to mass-allocate objects,
then, you can create your own zone and
tell it not to bother with finding
gaps to put new objects in. The
allocator can now jump to the end of
its allotted memory each time and
quickly assign memory to your new
objects, saving a lot of effort.

Allocators can save you time
elsewhere, too, as asking the OS for
more memory, which a zone needs to do
whenever it fills up, is another
costly operation if it's done a lot.
Much quicker is to ask for huge chunks
of memory at a time, and you can tell
your NSZone what to do here as well.

Rumor has it that NSZone could save
you deallocation time in the Good Old
Days, too, with a method that simply
chucks away all the allotted memory
without bothering to call
deallocators. If a set of objects is
self-contained, this could save a lot
of time, as you can chuck them all
away at once without tediously
deallocating them all. Alas, there
appears to be no sign of this godsend
in the current documentation; the
single NSZone method (NSRecycleZone?)
carefully puts all the objects in a
zone neatly on the default NSZone. Not
exactly a huge time-saver.

So, in summary, zones save you time in
mass allocations. But only if
programmers know how to use them!

From CocoaDev

Edit from comments: "Also important to note is that you can't use NSZone any more if you're using ARC. Which you should be."

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文