[英]Objective-c ARC is auto releasing my object
我的應用啟動時創建了一個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
使用單分派編寫單例的另一種方法:
+(Global *)sharedManager {
static dispatch_once_t pred;
static Global *shared = nil;
dispatch_once(&pred, ^{
shared = [[Global alloc] init];
});
return shared;
}
使變量變強,如果未在文件外部使用變量名,則還應該將其聲明為靜態。
__strong static Global* glob;
更好的是您有單例實例na,即
static Global* glob = nil;
+(Global*) SharedInstance
{
if (!glob)
{
glob = [[Global alloc] init];
[glob setStyles];
}
return glob;
}
現在,這可以確保整個應用程序中只有一個實例,並且您可以在應用程序即將終止時釋放該實例。 (這是一種設計模式 )可以從任何viewController引用此類屬性,並且只有在第一次時,它將分配和設置樣式。 否則,它將僅使用以前的參考 。 注意它返回全局引用 。 現在,您的全局類可以提供許多功能,並且這些功能將處於對象級別,而不是類級別。
例如:
- (void) someFunction;
可以稱為
[[Global SharedInstance] someFunction];
不要忘記,包括Global.h其他viewControllers
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.