首先,我热情地鄙视单身人士。虽然我应该尝试使用一个,但我只是不想。我想创建一个数据类(在加载时只由一个视图控制器实例化),然后使用另一个类,向该数据实例发出消息,直到它充满了这么多数据,它会微笑。
那么,我该怎么做?我实例化它时,我指向了数据类的实例。我现在在一个单独的视图控制器中,发生了动作,我想更新初始数据对象。我想我需要通过指针引用该对象,但我不知道该怎么做。是的,我设置了属性,getter和setter,它们似乎有效,但仅限于初始视图控制器类。
答案 0 :(得分:1)
如果您不喜欢该图案或者它不适合,则无需使用单件。假设您要在第一个视图控制器中创建第二个视图控制器,只需在第二个视图控制器中声明模型对象的ivar和属性,并在实例化时将模型对象分配给此属性。
答案 1 :(得分:0)
为您的对象创建一个全局变量,并将其存储在创建中。您可以在init方法(可能是坏的样式)中,或从调用者或通过界面构建器连接它。只需在使用它的文件中知道您的变量。
或者 - 好吧 - 使用某种单例模式并直接从该类获取实例。看起来更干净。
答案 2 :(得分:0)
认真使用单身人士。如果你不喜欢它们导致你不知道代码:
@interface Order : NSObject {
NSMutableArray *order;
}
@property (nonatomic, retain) NSMutableArray *order;
+ (Order *)sharedInstance;
@end
#import "Order.h"
@implementation Order
@synthesize order;
+(Order *)sharedInstance {
static Order *myInstance = nil;
@synchronized(self) {
if(!myInstance) {
myInstance = [[Order alloc] init];
}
}
return myInstance;
}
-(void)dealloc {
[order release];
[super dealloc];
}
@end
答案 3 :(得分:0)
庵。你好。核心数据不是一个适合您的框架吗?它允许您拥有一个持久存储和多个上下文来管理更新和合并更改以响应通知。我可能在这里不合适,但是看看你如何在第一个问题中对一个被广泛接受的模式提出强烈的意见,这表明你没有花太多时间去发现iOS中的目标c运行时和基础类的方式可以合作完成任务。在任何软件中,一个对象和只有一个对象拥有特定资源。你应该拥抱单身人士。我建议你花些时间阅读http://www.cocoadesignpatterns.com/。哦,是的,看看KVO的意思。
答案 4 :(得分:0)
为什么不把它变成你的app委托的属性?那样你不必使用单例模式,但是你正在利用Apple已经存在的单例模式的使用。
答案 5 :(得分:0)
不要忘记Objective-C是C的超集。
基本上,数据类是普通的C struct
。
如果要从另一个类访问该类的变量,请将其设为全局。
mydata.h:
struct MyData {
// Whatever data fields that you need, e.g.:
NSInteger value;
};
extern struct MyData mydata;
mydata.c:
struct MyData mydata = {
// Whatever initial value that you find relevant, e.g.:
.value = 42;
};