しかしその場合は、オブジェクトからオブジェクトにイベントとデータを送り、連携しなくてはならない。
その連携の方法の基本は以下の3つに分類できる。
・生成元のオブジェクトから生成先のオブジェクトへのメッセージは
・その逆はデリゲートとなる。
・任意のオ
やっとわかったよw
あとは、オブジェクト間のデータ共有はこれだ(多分)。
以下ではClassAとClassBとの間でvatModeを共有する。共有は非常に楽ちんだ。
ただしイベントは飛ばないので値の変更通知が必要な場合は上の3つを使うことになる。
なお、プロパティは循環参照にならないので、どのクラスでもStrongでいいらしい。ひとつ賢くなったかなう?
-------SharedValue.h------
#import <Foundation/Foundation.h>
@interface SharedValue : NSObject
+(id)sharedAllocation;
@property (nonatomic, strong) NSString *vatMode;
@end
#import <Foundation/Foundation.h>
@interface SharedValue : NSObject
+(id)sharedAllocation;
@property (nonatomic, strong) NSString *vatMode;
@end
-------SharedValue.m------
#import "SharedValue.h"
@implementation SharedValue
static id allocatedInstance = nil;
#import "SharedValue.h"
@implementation SharedValue
static id allocatedInstance = nil;
+(id)sharedAllocation{
if (allocatedInstance == nil) {
allocatedInstance = [[self alloc]init];
}
return allocatedInstance;
}
if (allocatedInstance == nil) {
allocatedInstance = [[self alloc]init];
}
return allocatedInstance;
}
//--- shared value----------
-(NSString *)vatMode{
if(!_vatMode) _vatMode = [[NSString alloc]init];
return _vatMode;
}
@end
------------------------------------
-(NSString *)vatMode{
if(!_vatMode) _vatMode = [[NSString alloc]init];
return _vatMode;
}
@end
------------------------------------
------ ClassA.m --------------
#import "SharedValue.h"
@interface ClassA ()
@property (nonatomic, strong) SharedValue *sharedValue;
@end
#import "SharedValue.h"
@interface ClassA ()
@property (nonatomic, strong) SharedValue *sharedValue;
@end
@implementation ClassA
-(id)init {
self = [super init]
if (self) {
_sharedValue = [SharedValue sharedAllocation];
_sharedValue.vatMode = @"ClassA";
}
return self;
}
-(id)init {
self = [super init]
if (self) {
_sharedValue = [SharedValue sharedAllocation];
_sharedValue.vatMode = @"ClassA";
}
return self;
}
@end
------ ClassB.m ------------
#import "SharedValue.h"
@interface ClassA ()
@property (nonatomic,
@end
@implementation ClassV
-(id)init {
self = [super init]
if (self) {
_sharedValue = [SharedValue sharedAllocation];
_sharedValue.vatMode = @"ClassB";
}
return self;
}
-(id)init {
self = [super init]
if (self) {
_sharedValue = [SharedValue sharedAllocation];
_sharedValue.vatMode = @"ClassB";
}
return self;
}
@end
------------------------------------
------------------------------------
0 件のコメント:
コメントを投稿