-1

私のシングルトンは次のようになります。

ヘッダ

#import <Foundation/Foundation.h>

@interface MyManager : NSObject
{

    MyManager *_sharedObject;


}


@property(nonatomic,copy) NSString * nameTitle;
@property(nonatomic,copy) NSString * nameDescription;



//assets
@property (nonatomic, strong) NSMutableArray * assets;


+ (id)sharedInstance;

@end

実装

#import "MyManager.h"

@implementation MyManager

@synthesize listingTitle;
@synthesize listingDescription;


//Assets
@synthesize assets;

+ (id)sharedInstance
{
    static dispatch_once_t pred = 0;
    __strong static id _sharedObject = nil;
    dispatch_once(&pred, ^{
        _sharedObject = [[self alloc] init]; // or some other init method
    });
    return _sharedObject;
}
@end

いつでもプロパティを初期化およびリセットできるようにするメソッドをさらに 2 つ追加してください。初期化に init メソッドを使用し、リセットする別のメソッドを追加することも考えていました。これは正しいアプローチでしょうか?

このようなもの:

-(id)init {
    self = [super init];
    if (self != nil) {

         [self reset];

    }

    return self;
}

-(void)reset {

self.listingTitle=@"";
self.listingDescription=@"";

}

これは正しい方法でしょうか?ありがとう

4

2 に答える 2

1

ここでご覧になったように、何かを行うための絶対的な正しい方法はありません。しかし、私は他のアプリでこれを行っており、あなたにとってはうまくいくと信じています. 実際、nib で (initWithCoder: を使用して) および通常の方法 (initWithFrame:) でインスタンス化できるサブクラスを作成する場合、この手法もうまく機能します。アイデアは、コードを複製するのではなく、1 つの場所に配置して、複数の場所から呼び出すことです。

変更可能なオブジェクトをインスタンス化する場合は、これを 2 段階にする必要があります。変更可能なオブジェクトを「commonInit」に追加してから、「reset」を呼び出して、元のオブジェクトを入れたいと思っているとおりにすべてを保証します。

于 2012-09-22T22:14:38.970 に答える
1

新しく割り当てられたインスタンスで動作することを意図していないメソッドに名前を付けると、init私は間違っていると思います。しかし、resetオブジェクトのプロパティを適切なデフォルトに復元する方法は、私には問題ないように思えます。

于 2012-09-22T22:54:28.827 に答える