English 中文(简体)
分类方法中分配的记忆
原标题:Releasing memory allocated in class method initialize

I am allocating memory in the class method initialize:

UIColor * customBlue;
UIColor * customRed;

@implementation UIColorConstants

+ (void)initialize{
 if ( self == [UIColorConstants class] ) { 
  customBlue = [[UIColor alloc]initWithRed:0 green:0.137 blue:0.584 alpha:1];
  customRed = [[UIColor alloc]initWithRed:.91 green:0.067 blue:0.176 alpha:1];
 }
}

+ (UIColor *)getCustomRed{
 return customRed;
}

+ (UIColor *)getCustomBlue{
 return customBlue;
}

@end

释放所分配记忆的最佳/正确地点何在,因为没有对方自动启动?

最佳回答

这里没有,因此,你不会释放这种记忆;在你的工作结束时,非洲顾问办收回。 一旦装货和开标,整个执行过程(禁止有人打<代码>-[NSBundle unload])期间,该类别就一直存在。 班级数据预计在同一期间保持不变。

如果你掌握大量类别数据,你可以尝试谨慎地开始数据,例如:

+ (UIColor *)getCustomBlue {
    static UIColor *customBlue = nil;
    if (!customBlue) customBlue = [[UIColor alloc] initWithRed:0.0 green:0.137 blue:0.584 alpha:1.0];
    return customBlue;
}

其后,在提出请求之前,不设立“密码”栏目。 如果无人使用,那么它就永远不会产生,也永远不会利用任何记忆。

<>strong>ETA: St3fan是正确的,你也只能制造一个新自动释放的彩色。 如果创造成本低,这很可能是最好的事情。

如果您有某种原因无法由本组织收回的资源,你可以使用<代码>atexit()登记一位在册的手稿进行清理:

static void
CleanupColors(void) {
    [customBlue release], customBlue = nil;
    [customRed release], customRed = nil;
}

+ (void)initialize {
    if (...) {
        ...
        atexit(CleanupColors);
    }
}
问题回答

例如,你给我提供清洁服务。 记忆量非常小,清理的唯一适当地点是器具撤离时,你确实不关心这些物体。

你们可能认为的一点是,不要把这些肤色 around在一边,而只是做:

+ (UIColor*) customRedColor {
    return [[[UIColor alloc]initWithRed:0 green:0.137 blue:0.584 alpha:1] autorelease];
}

Then you have useful little helper methods that do not require those objects to stick around. It will simply be the caller s responsibility to make sure the color is retained or not.

这可能在4个多任务环境中更好和更简单的行为。





相关问题
Code sign Error

I have created a new iPhone application.I have two mach machines. I have created the certificate for running application in iPhone in one mac. Can I use the other mac for running the application in ...

ABPersonViewController Usage for displaying contact

Created a View based Project and added a contact to the AddressBook using ABAddressBookRef,ABRecordRef now i wanted to display the added contact ABPersonViewController is the method but how to use in ...

将音频Clips从Peter改为服务器

我不禁要问,那里是否有任何实例表明从Peit向服务器发送音响。 I m不关心电话或SIP风格的解决办法,只是一个简单的袖珍流程......

• 如何将搜查线重新定位?

我正试图把图像放在搜索条左边。 但是,问题始于这里,搜索条线不能重新布署。

热门标签