Objective-C:没有init的引用类

时间:2010-09-15 21:21:46

标签: objective-c-2.0

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

2 个答案:

答案 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教程或示例代码来了解它是如何完成的。