Iphone 如何引用来自不同类的指针?

Iphone 如何引用来自不同类的指针?,iphone,objective-c,view,controllers,Iphone,Objective C,View,Controllers,首先,我非常鄙视单身汉。虽然我应该试着用一个,但我不想。我想创建一个数据类(加载时视图控制器只实例化一次),然后使用另一个类,将该数据实例中的垃圾消息传递出去,直到它充满了如此多的数据,它微笑着说 那么,我该怎么做呢?在实例化数据类时,我创建了一个指向该实例的指针。我现在在一个单独的视图控制器中,操作发生,我想更新初始数据对象。我想我需要通过指针引用那个对象,但我不知道怎么做。是的,我已经设置了属性、getter和setter,它们似乎可以工作,但仅在初始视图控制器类中 为对象创建一个全局变量,

首先,我非常鄙视单身汉。虽然我应该试着用一个,但我不想。我想创建一个数据类(加载时视图控制器只实例化一次),然后使用另一个类,将该数据实例中的垃圾消息传递出去,直到它充满了如此多的数据,它微笑着说


那么,我该怎么做呢?在实例化数据类时,我创建了一个指向该实例的指针。我现在在一个单独的视图控制器中,操作发生,我想更新初始数据对象。我想我需要通过指针引用那个对象,但我不知道怎么做。是的,我已经设置了属性、getter和setter,它们似乎可以工作,但仅在初始视图控制器类中

为对象创建一个全局变量,并在创建时将其存储在那里。您可以通过init方法(可能是错误的样式)或从调用方或通过interface builder将其连接起来。只需在使用变量的文件中公开变量即可


或者-很好-使用某种单例模式并直接从该类获取实例。看起来干净多了。

认真使用单件。如果您不喜欢它们,因为您不知道代码:

@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

如果您不喜欢该模式或不适合,则无需使用单例。假设您正在第一个视图控制器中创建第二个视图控制器,只需在第二个视图控制器中为您的模型对象声明一个ivar和属性,并在实例化它时,将模型对象分配给该属性。

Um。你好核心数据对您来说不是一个足够好的框架吗?它允许您拥有一个持久存储和多个上下文来管理更新和合并更改以响应通知。我可能在这里出界,但是看到你如何在第一个问题中对一个被接受的模式提出强烈的观点,表明你没有花很多时间发现在IO中的目标C运行时和基础类可以协作来实现任务的方式。在任何软件中,一个对象且只有一个对象拥有特定的资源。你应该拥抱单身汉。我建议你花点时间读书。哦,是的,看看KVO的意思

为什么不将其作为应用程序代理的属性?这样你就不必使用单例模式,但你可以利用苹果公司已经存在的单例模式

不要忘记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;
};

所以你需要一个类,实例化一次,纯粹是为了存储数据。你可能讨厌他们,但据我所知,这是一本关于单身汉的教科书。单身汉有什么问题?。。你能展示一下你的代码吗?@Rudiger:那么,简单地创建一个实例有什么问题?Jalfs关于这个主题的帖子很好:。我不明白你的问题。对不起。如果Justagruvn希望一个类存储数据,并让另一个类从中检索数据,我会假设会有多个类希望从中获取数据,否则他只会使用IVAR。我喜欢单身是因为有正确的目的也许我对这个问题读得太多了。如果您只是想从存储ivar的地方加载的实例访问ivar,那么不要使用单例。但是我看你的问题的方式,你应该用一个单子。如果这是我认为使用super.ivarname的第一种方式,那么你可以访问var…可能是真的,但是如果他没有在第一个视图中创建第二个视图,那么他将遇到麻烦。当作者说“我现在在一个单独的视图控制器中”时,我认为这两者是无关的。我想如果没有更多的信息,很难给出准确的答案。如果我们不喜欢它们,因为它们不好呢?如果我们不喜欢它们,因为我们更喜欢避开全局呢?如果我们不喜欢它们,因为它们很难保证线程安全呢?如果我们不喜欢它们,因为它们是不必要的呢?如果我们不喜欢它们,因为它们不必要地约束我们的代码并阻止重用,那该怎么办?有时你只需要globals,这种情况很少见,但如果你发现在iphonesdk中很难使它们线程安全,因为它为你做了一切,那么你就做错了,就像globals有时你只需要它们一样。你说的话太笼统了。就像人们说永远不要在HTML中使用表一样,如果要显示表,请使用表。不要进入精英主义的东西。虽然我对作者所做的事情下了个结论,但我所做的只是发布一个单例代码,因为当我第一次需要全局代码时,很难进行编码,而且线程不安全。singlton修复了它。我的原因是我制作了一个tab bar应用程序,我有一个用于所有选项卡的变量,它是在应用程序委托中启动的。我可以使用一个更难访问的全局文件,我可以将其写入一个文件(在iPhone上速度较慢,而且不必要,因为下次打开应用时我不需要它)或一个数据库(过度杀戮),那么剩下什么呢?