请你好..我是这个东西的菜鸟。我想通过一个我多次调用的方法来分配和使用一个对象,而不是让它成为一个全局变量并在我的initWithFrame方法中分配它我想在一个方法中分配它,并使它成为一个局部变量然后我分配然后使用。
答案 0 :(得分:6)
您需要退一步思考访问所述对象需要多少不同的东西。
如果是每个人,那么您应该实现共享实例模式。类似的东西:
+ (MyObject *) mySharedObjectThatEveryoneUses
{
static MyObject *sharedInstance;
if (!sharedInstance) {
sharedInstance = [MyObject alloc];
sharedInstance = [sharedInstance init];
}
return sharedInstance;
}
请注意,上述内容不考虑初始化时的线程。即如果多个线程第一次同时调用该方法,则最终可能会有多个实例。另请注意,+alloc
和-init
的分割是这种情况所特有的模式。这样做可以避免-init
方法导致+ mySharedObjectThatEveryoneUses
被调用的情况,在分配发生之前创建第二个实例。
现在,如果您正在讨论对象图中的访问权限;访问应用程序中某些对象子集中的单个实例,然后您需要在所有对象可以到达的某个地方使用实例变量。
例如,假设您正在实现一个游戏,其中有一个Player对象,而该Player对象有一堆Piece实例。创建一个Piece时,通常会有一个属性引用拥有的玩家,这将是您的单一参考点。
如果你需要更短暂的东西,你应该看看你的控制器层应该是什么。即必须有某个对象可以作为需要访问该单个实例的对象集的协调器。
答案 1 :(得分:1)
如果我正确理解了您的问题,那么您正在寻找static
变量。静态变量将其值保持为全局变量,但它“存在”一个函数,如局部变量。你的功能看起来像这样:
+ (MyObject *)getSingletonObject {
static MyObject *obj = [[MyObject alloc] init];
return obj;
}
第一次调用此方法时将创建 obj
,但再次调用该方法将返回它已创建的同一对象。
答案 2 :(得分:1)
你想要的是一个单身人士。您可以在这里阅读Apple推荐的单身创建方式:
在“Cocoa Objects”部分中查找“Creating a Singleton Instance”。除了类级别的初始化程序之外,还有一些方法可以定义。
答案 3 :(得分:0)
我不完全确定我理解你的问题,但你不能真正多次分配同一个对象。
每次你想要一个新实例时,你都要求Class对象为你分配一个新实例(是的,作为对象的类本身就是令人兴奋的)。所以这段代码:
NSString* s;
s = [[NSString alloc] init];
s = [[NSString alloc] init];
在这里,您将创建两个NSString实例。这段代码很糟糕,因为我们已经分配了第一个实例但尚未发布,并且只将其引用分配给新实例。这会导致内存泄漏。