0

通常,如果我有 Class 1 并且我想在其他地方使用它,我会写 Class1 *class1 = [[Class1 alloc] init]; 创建一个新实例。但是,如果我需要在另一个类中引用 Class1 中的变量并且不想创建新实例,而是使用现有实例,该怎么办。我该怎么做?如果我调用 init 并创建一个新实例,那么我会将所有变量重置为 0。我知道这是非常初级的,但也许这是我从未真正理解的东西。任何帮助表示赞赏。

4

2 回答 2

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

请注意,此处定义的方法以 a+而不是 a开头-。这使它们成为类方法;也就是说,您将消息发送到类本身,而不是它的任何实例:

[ClassWithSharedFoo setSharedFoo:@"Foo"];
NSString *foo = [ClassWithSharedFoo sharedFoo];

在 C 中,static变量就像一个全局变量,但它只在声明它的文件中可见;因此,它由 的所有实例共享ClassWithSharedFoo,但不能在其他地方访问或修改,除非通过提供的类方法。

于 2010-09-15T21:24:46.873 回答
0

您需要为另一个对象提供对该 Class1 实例的引用。您可以通过设置实例变量、在 Interface Builder 中连接连接或将实例作为参数传递给另一个对象来实现此目的。

你说得对,这是非常基础的,但它也是非常基础的,所以你花时间思考它是件好事。您可以尝试通过一些 Objective-C 教程或示例代码来了解它是如何完成的。

于 2010-09-16T18:26:14.000 回答