我正在尝试降低应用程序在运行时使用的内存占用空间....
在根据系统字体大小获取字体的标准用法中,api用作font = [NSFont systemFontOfSize]
+ (NSFont *)systemFontOfSize:(CGFloat)fontSize; // Aqua System font
根据我的理解,font
将被自动释放池释放,首先我需要确认这种低估是否正确?
如果这是正确的,那么如果我有一个drawWithFrame
函数,我每次绘制一个单元格时都会使用它。我不应该在那里发布吗?并且会增加应用程序的内存占用量,因为在调用应用程序自动释放池时会释放字体吗?
现在又是这种理解是对的吗?有两种方法
NSAutoReleasePool *pool
。在框架你们有什么建议?
答案 0 :(得分:2)
函数名systemFontOfSize:
不以任何魔术关键字“alloc”,“new”,“copy”或“mutableCopy”开头,因此您不负责释放它返回的内容。有关详细信息,请参阅Cocoa basic memory management rules。
答案 1 :(得分:0)
与返回对象的大多数非“init”方法一样(“复制”是一个突然出现的异常)systemFontOfSize返回的对象是自动释放的,因此它将在(非常接近)的某个时刻释放将来
如果要使用本地范围之外的变量“font”指向的对象,则应保留它并在不再需要时(或在被其他字体替换之前)将其释放
编辑:我刚刚重读,意识到你每次都在创建字体,所以第2段与你的问题没那么相关,但无论如何,除非字体是必须每秒多次改变的东西,我要考虑在drawrect方法之外创建字体对象。我不知道这对你当前的FPS /响应能力有多大的实际影响,但通常很好习惯在循环中多次多次执行对象创建等事情。
答案 2 :(得分:0)
这两个项目都是正确的。按照惯例,所有命名的初始值设定项都返回自动释放的对象。由于您(drawWithFrame
的范围)没有明确地分配font
,因此您不负责释放它。就像你也建议的那样,可以通过在它周围放一个autorelease
池来优化它
是否有利于编码器的额外打字工作是值得商榷的。
答案 3 :(得分:0)
我不习惯处理Font
,所以我可能会不在处理。
但是对我来说,如果你经常需要和反对,我会把它缓存在一个属性中 创建和删除比阅读属性更昂贵。
如果这是您课程的一个重要特征,我会在课程的init
中创建它。
这将节省不必要的测试,看它是否已经存在。