代码之家  ›  专栏  ›  技术社区  ›  Oh Danny Boy

目标C:没有init的引用类

  •  0
  • Oh Danny Boy  · 技术社区  · 14 年前

    通常,如果我有Class1,并且想在其他地方使用它,我会编写Class1*Class1=[[Class1 alloc]init];来创建一个新的实例。但是如果我需要在另一个类中引用类1中的变量,并且不想创建一个新实例,而是使用一个现有的实例,该怎么办呢?我该怎么做?如果我调用init并创建一个新实例,那么我将把所有变量重置回0。我知道这是很基本的,但也许这是我从未真正理解过的。感谢您的帮助。

    2 回复  |  直到 14 年前
        1
  •  0
  •   David M.    14 年前

    一旦你有了一个类的实例,你就可以把它存储在一个变量中,传递给其他方法,然后在那里使用它:

    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中,a static 变量类似于全局变量,但它只在声明它的文件中可见;因此,它由 ClassWithSharedFoo ,但不能在其他地方访问或修改,除非使用提供的类方法。

        2
  •  0
  •   Chuck    14 年前

    您需要给另一个对象一个对Class1实例的引用。可以通过设置实例变量、在接口生成器中挂接连接或将实例作为参数传递给另一个对象来实现这一点。

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

    推荐文章