-1

私のように、このようなサイト (およびその他のサイト) を使用して、iOS と Xcode を独学している人はたくさんいます。そこにはたくさんの情報があり、それと私が購入した本の間で私は多くのことを学び、私の最初のアプリをほぼ完成させました. ある UIViewController から別の UIViewController に情報を渡して UITableView に表示するには、4 つの NSMutableArray にアクセスする必要があります。

問題は、Singleton (および appDelegate のグローバル変数) に関する情報が多様であり、苦労しているプログラマーにとって混乱を招くことです。アプリ内および UIView コントローラー間で情報を共有するこれら 2 つの方法について、明確で正確かつ完全な情報をどこで見つけることができますか?

ありがとう。

4

2 に答える 2

2

(まず第一に、私は指摘する義務があると感じています。それは、複数のView Controllerでデータを利用できるようにするために使用する方法ではないということです。)

Objective-Cにはグローバル変数はありません。少なくとも「アプリ全体」ではありません。'ファイル全体'変数は次の方法で宣言できます。

static NSArray *_array;

ただし、同じファイル内でのみアクセスできます。他のクラスでアクセスできるようにするには、これを行うためのクラスメソッドを作成する必要があります(少なくとも私が知る限り):

+ (NSArray *)array
{
    return array;
}

+ (void)setArray:(NSArray *)array
{
    _array = array;
}

(もちろん、ヘッダーファイルでクラスメソッドを宣言する必要もあります。

シングルトンパターンは次のように実装できます。

@interface SomeClass : NSObject 

@property(nonatomic,retain)NSArray *array; 

+(SomeClass*)sharedInstance;    

@end  



@implementation SomeClass    

static SomeClass *instance =nil;    
+(SomeClass *)sharedInstance    
{    
    @synchronized(self)    
    {    
        if(instance == nil)    
        {    
            instance= [[SomeClass alloc] init];    
        }    
    }    
    return instance;    
}  

次に、次のコマンドを呼び出してアレイにアクセスできます。

[[SomeClass] sharedInstance].array
于 2012-10-28T14:43:52.570 に答える
0

静的(別の回答のように)または「シングルトン」宣言の両方を使用できます。それでうまくいきます。これは実際のシングルトンではありませんが、次のように機能します。

AppDelegate* app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
NSArray* arr1 = app.arr1;
if(!arr1) {
    // .. init the arr1 here
    NSArray* tmp = ...
    app.arr1 = tmp;
}

もちろんsetArr1、AppDelegate 自体でメソッドをオーバーライドする方がよいでしょうが、場合によって異なります。

于 2012-10-28T14:54:43.447 に答える