Цель-C: Ссылочный класс без инициализации - PullRequest
0 голосов
/ 16 сентября 2010

Обычно, если бы у меня был Class 1, и я хотел бы использовать его в другом месте, я написал бы Class1 * class1 = [[Class1 alloc] init];создать новый экземпляр.Но что, если мне нужно будет ссылаться на переменные в Class1 в другом классе, и я не хочу создавать новый экземпляр, а использовать существующий.Как бы я это сделал?Если я вызову init и создам новый экземпляр, я сброслю все переменные обратно на 0. Я понимаю, что это очень элементарно, но, возможно, это то, чего я никогда не понимал.Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 16 сентября 2010

Вам нужно дать другому объекту ссылку на этот экземпляр Class1. Это можно сделать, установив переменную экземпляра, подключив соединение в Интерфейсном Разработчике или передав экземпляр в качестве аргумента другому объекту.

Вы правы, что это очень просто, но также очень важно, так что хорошо, что вы нашли время подумать об этом. Вы можете попробовать проработать несколько учебников Objective-C или пример кода, чтобы увидеть, как это делается.

0 голосов
/ 16 сентября 2010

Получив экземпляр класса, вы можете сохранить его в переменной, передать его другим методам и использовать там:

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, но не может быть доступен или изменен в другом месте, кроме как с помощью предоставленных методов класса.

...