Objective-c ARC自动释放我的对象

时间:2012-08-24 01:31:29

标签: iphone objective-c ios

我在App启动时创建了一个Global对象并设置了一些全局属性。 我稍后从ViewController引用其中一个属性。有时候整个应用程序崩溃都很好。

如何告诉ARC不要自动释放我的对象?

#import "Global.h"
#import "GeneralHelper.h"

@implementation Global

@synthesize orangeClr;

Global* glob;

+(void) AppInit
{    
    glob = [[Global alloc] init];
    [glob setStyles];
}
-(void) setStyles
{
    orangeClr =  [GeneralHelper colorFromRGBA:255 :102 :0 :1];
}

+(Global*) get { return glob; }


@end

3 个答案:

答案 0 :(得分:1)

使用单一调度编写单例的另一种方法:

+(Global *)sharedManager {
    static dispatch_once_t pred;
    static Global *shared = nil;

    dispatch_once(&pred, ^{
        shared = [[Global alloc] init];
    });
    return shared;
}

答案 1 :(得分:0)

使变量变强,如果在文件外没有使用变量名,你也应该声明它是静态的。

__strong static Global* glob;

答案 2 :(得分:0)

最好你有单身实例na,即

static Global* glob = nil;

+(Global*) SharedInstance
{   
    if (!glob)
    {
        glob = [[Global alloc] init];
        [glob setStyles];
    }
    return glob;
}

现在确保应用只有一个实例,并且当应用即将终止时,您可以发布此实例。 (它是设计模式之一)您可以从任何 viewController 引用此类属性,并且仅在第一次分配时和设置样式。其他时候它只会使用以前的参考。请注意,它返回全局参考。现在,您的全局类可以提供许多功能,并且该功能将在对象级别而不是类级别。

例如:

- (void) someFunction;

可以称为

[[Global SharedInstance] someFunction];

不要忘记在其他 viewControllers中加入 Global.h