通常如果我有Class 1而我想在别处使用它,我会写Class1 * class1 = [[Class1 alloc] init];创建一个新实例。但是,如果我需要在另一个类中引用Class1中的变量并且不想创建新实例,而是使用现有实例,该怎么办呢?我该怎么办?如果我调用init,并创建一个新实例,那么我将所有变量重置为0.我明白这是非常基本的,但也许这是我从未真正理解的东西。任何帮助表示赞赏。
答案 0 :(得分:0)
一旦有了类的实例,就可以将它存储在变量中,将其传递给其他方法,并在那里使用它:
Class1 *object1 = [[Class1 alloc] init];
[someOtherObject doSomethingWith:object1];
...
@implementation SomeOtherClass
- (void)doSomethingWith:(Class1 *)anObject {
[anObject blah];
}
@end
在其他语言中,您需要一个“类变量”。 Objective-C没有它们,但你可以使用静态变量来模拟它们:
static NSString *foo;
@implementation ClassWithSharedFoo
+ (NSString *)sharedFoo {
return foo;
}
+ (void)setSharedFoo:(NSString *)newFoo {
if(newFoo != foo) {
[foo release];
foo = [newFoo retain];
}
}
@end
请注意,此处定义的方法以+
而不是-
开头。这使他们成为类方法;也就是说,您将消息发送给类本身,而不是它的任何实例:
[ClassWithSharedFoo setSharedFoo:@"Foo"];
NSString *foo = [ClassWithSharedFoo sharedFoo];
在C中,static
变量就像一个全局变量,但它只在声明它的文件中可见;因此,它由ClassWithSharedFoo
的所有实例共享,但除了提供的类方法之外,无法在其他地方访问或修改。
答案 1 :(得分:0)
您需要为另一个对象提供对该Class1实例的引用。您可以通过设置实例变量,在Interface Builder中连接连接或将实例作为参数传递给另一个对象来完成此操作。
你是对的,这是非常基本的,但它也是非常基础的,所以你花时间去思考它是好的。您可以尝试使用一些Objective-C教程或示例代码来了解它是如何完成的。