私は以下のようなシングルトンを持っています。これはNSDictionaryのインスタンスを作成してデータを保持します。ここ.Hは次のとおりです。ここでシングルトンクラスでのNSDictionaryへのアクセス(コピーの作成なし)
@interface FirstLast : NSObject
@property (strong, nonatomic, readonly) NSArray *firstArray;
@property (strong, nonatomic, readonly) NSArray *lastArray;
@property (strong, nonatomic, readonly) NSDictionary *fl;
+ (FirstLast *) firstLast;
- (NSDictionary *) tempDic;
@end
は、このすべてが正常に動作します.M
@implementation FirstLast
@synthesize firstArray = _firstArray;
@synthesize lastArray = _lastArray;
@synthesize fl = _fl;
+ (FirstLast *)firstLast {
static FirstLast *singleton;
static dispatch_once_t once;
dispatch_once(&once, ^{
singleton = [[FirstLast alloc] init];
NSLog(@"FirstLast instantiated");
});
return singleton;
}
- (NSDictionary *) tempDic{
_firstArray = [[NSArray alloc] initWithObjects:@"Bob", @"Joe", @"Sally", @"Sue", nil];
_lastArray = [[NSArray alloc] initWithObjects:@"Jones", @"Johnson", @"Thompson", @"Miller", nil];
_fl = [NSDictionary dictionaryWithObjects:_firstArray
forKeys:_lastArray];
NSLog(@"tempDic just made _fl at this address");
NSLog(@"%p", _fl);
return _fl;
}
@end
です。私は他の場所でtempDicへのアクセスを獲得しようとすると、
NSLog(@"VC is setting up tempDic");
[[WordsClues wordsClues] tempDic];
次のように:ビューコントローラでは、私は(あまりにも正常に動作します)初めてこのすべてのインスタンスを
NSInteger rIndex = arc4random_uniform(4) + 1;
NSString *fname = [[[FirstLast firstLast].tempDic allValues] objectAtIndex:rIndex];
それが正常に動作しますが、このプロセスを繰り返すと、新しいtempDicが作成されるたびに繰り返されます。私はこれを知っているので、アドレスを与えるNSLogは毎回異なる答えを与える。私は本当に私のシングルトンが達成しようとしていると思っていた既存の辞書にアクセスしたいと思っています。明らかに私はtempDicに正しくアクセスしていないか、シングルトンが私のためにできることを誤解しているか、tempDicを間違って設定しています。目標は、tempDicの1つのコピーからランダムな値を取得し、tempDicのローカルコピーをその場所全体に書き込まないことです。ありがとう。
を行うことができます私は初心者だと完全に物事を行うための最善の方法を理解していないので、答えはあると思います。 '-tempDic'の内容を' -FirstLast'の中に移動すると言っていますか?あるいは別の '-init'メソッドを作成しますか?そして、 '-tempDic'は単に' _fl'を返すものになりますか?どのように見えるだろうか?ご協力いただきありがとうございます! –
ありがとう、それはまさにそれです。今は素晴らしい作品です。私は 'FirstLast'もクラスを初期化していると思っていたと思いますが、明らかにそうではありません。 'FirstLast'は何を言っていますか?私は、それが何をしているのかを記述するための適切な用語/語彙を知らない(第2のインスタンスが発生するのを防ぐ以外に)。 –