0

アプリの起動時にグローバルオブジェクトを作成し、いくつかのグローバルプロパティを設定しました。後で、ViewControllerからこれらのプロパティの1つを参照します。アプリ全体がクラッシュする場合もあります。

オブジェクトを自動解放しないように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
4

3 に答える 3

1

シングルディスパッチを使用してシングルトンを作成する別の方法:

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

    dispatch_once(&pred, ^{
        shared = [[Global alloc] init];
    });
    return shared;
}
于 2012-08-24T08:08:48.817 に答える
0

変数を強力にします。変数名がファイルの外部で使用されていない場合は、静的と宣言する必要があります。

__strong static Global* glob;
于 2012-08-24T01:39:08.797 に答える
0

シングルトンインスタンスnaがある方が良いです。つまり、

static Global* glob = nil;

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

これで、アプリ全体に1つのインスタンスのみが存在するようになり、アプリが終了しようとしているときにこれを解放できます。(これはデザインパターンの1つです)このクラスプロパティは任意のviewControllerから参照でき、初めてスタイルを割り当て設定します。それ以外の場合は、以前の参照を使用します。グローバル参照を返すことに注意してください。これで、グローバルクラスは多くの機能を提供でき、その機能はクラスレベルではなく、オブジェクトレベルになります。

例えば:

- (void) someFunction;

と呼ぶことができます

[[Global SharedInstance] someFunction];

そして、他のviewControllersにGlobal.hを含めることを忘れないでください

于 2012-08-24T07:08:48.407 に答える