我在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
答案 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