簡體   English   中英

Objective-c ARC正在自動釋放我的對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM