首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否需要释放[NSFont systemFontOfSize]内存

是否需要释放[NSFont systemFontOfSize]内存
EN

Stack Overflow用户
提问于 2011-11-27 04:59:05
回答 3查看 823关注 0票数 1

我试图降低我的应用程序在运行时使用的内存占用空间.

在根据系统字体大小获取字体的标准用法中,api用作font = [NSFont systemFontOfSize]

代码语言:javascript
复制
+ (NSFont *)systemFontOfSize:(CGFloat)fontSize; // Aqua System font

根据我的理解,font将被自动释放池释放,首先我需要确认这种低估是正确的吗?

如果这是正确的,那么如果我有一个drawWithFrame函数,我在每次绘制单元格时都使用这个函数。我不应该把它放那儿吗?是否会增加应用程序的内存占用,因为在调用应用程序自动释放池时,字体将被释放?

现在这个理解又是正确的吗?有两种方法

  • 找到发布NSFont的方法
  • 放一个NSAutoReleasePool *pool。在画框中自己画出来

你们有什么建议?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-27 05:25:36

我不习惯和Font打交道,所以我可能会离开。

但是对于我来说,如果您经常需要和对象,我会将它缓存在一个属性中。

创建和删除比读取属性更昂贵。

如果这是类的一个关键特性,我将在类的init中创建它。

这将节省不必要的测试,以确定它是否已经存在。

票数 0
EN

Stack Overflow用户

发布于 2011-11-27 05:05:04

函数名systemFontOfSize:不以任何神奇的关键字"alloc“、"new”、"copy“或"mutableCopy”开头,因此您不负责发布它返回的内容。有关细节,请参阅可可基本内存管理规则

票数 2
EN

Stack Overflow用户

发布于 2011-11-27 05:05:57

与大多数返回对象的非“init”方法一样(“复制”是一个突然出现的异常),systemFontOfSize返回的对象是自动释放的,因此它将在不久的将来被释放。

如果要使用变量“字体”指向的对象,则应保留该对象,并在不再需要时(或在被另一种字体替换之前)释放它。

编辑:我只是重新读了一遍,发现你每次都在创建字体,所以第二段与你的问题没有太大关系,但无论如何,除非字体必须在每秒进行多次修改,否则我会考虑在drawrect方法之外创建字体对象。我不知道这会对您当前的FPS/响应性产生多大的实际影响,但通常情况下,习惯于不做诸如在循环中多次重复创建对象之类的事情是很好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8283750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档