1

私は iOS プログラミングの初心者で、シングルトン クラスとは何か、なぜそれが使用されるのかに非常に興味があります。いくつかの情報を見つけましたが、あいまいです。特に、実際の例に適用したいと思います。私のプロジェクトは Facebook SDK を使用しており、友人リストを含む NSDictionary のシングルトン クラスを作成したいと考えています。私の .m 委任ファイル:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//here is some other code

facebook = [[Facebook alloc] initWithAppId:@"my app id" andDelegate:self];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"] 
    && [defaults objectForKey:@"FBExpirationDateKey"]) {
    facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
    facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}

if (![facebook isSessionValid]) {
    NSArray *permissions = [[NSArray alloc] initWithObjects:
                            @"user_location", 
                            @"friends_location",
                            @"read_friendlists",
                            nil];
    [facebook authorize:permissions];
    [permissions release];
}
[facebook requestWithGraphPath:@"me/friends" andDelegate:(id)self];

//here is some other code
}

そして、フレンド リストを返すリクエストの NSDictionary 値を設定します。

- (void)request:(FBRequest *)request didLoad:(id)result {
_friendsDictionary = result;
}

その方法では、シングルトン クラスを記述する必要があり、デリゲート クラスを使用しませんAppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

4

3 に答える 3

2

シングルトン パターンは、iOS コードでは使用しないでください。シングルトンは、定義上、メモリ リークです。代わりにすべきことは、アプリ デリゲートから参照される単一のインスタンスを作成することです。シングルトンのようにインスタンスを 1 つだけ作成できますが、決して解放されない静的 (プライベート) 変数を作成しないように注意してください。アプリ デリゲートからの参照は、メモリが解放されているかどうかを判断するために、常に nil に設定できます。上記のシングルトンアプローチではそれを行うことはできません。

UIView 派生要素への参照はクリーンアップされないため、大量のシステム メモリがリークするため、このインスタンスからのデータのみを参照するように注意してください。

于 2012-08-31T06:02:22.287 に答える