Как мне работать между классами в Objective-C? - PullRequest
0 голосов
/ 31 января 2011

В настоящее время большая часть моего кода находится в том же контроллере представления, и я хотел бы перенести часть его в другие области. Например, переместить анимацию куда-то еще. Но тогда как я могу ссылаться на вещи, которые находятся в другом классе? И как я могу ссылаться обратно из этого класса на элементы в моем классе viewcontroller? Отказ от этого всегда отговаривал меня от этого.

Ответы [ 3 ]

1 голос
/ 31 января 2011

Есть несколько способов, которыми вы можете достичь этого.один способ - это делегирование какао @protocol, второй - создание ссылок на каждый объект в другом классе.

для первого способа сделать что-то вроде этого:

@class Class2;

@interface Class1 : NSObject {
    Class2 *cls2Pointer;

}

@property Class2 *cls2Pointer;
@end



@class Class1;

@interface Class2 : NSObject {
    Class1 *cls1Pointer;

}
@property Class1 *cls1Pointer;
@end



int main(){
    Class1 cls1Obj = [[Class1 alloc] init];
    Class2 cls2Obj = [[Class2 alloc] init];

    [cls1Obj setCls2Pointer:cls2Obj];
    [cls2Obj setCls1Pointer:cls1Obj];

}

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

    @protocol Class1Delegate

- (void)class1:(Class1)obj MethodWithArg:(id)arg;

@end


@interface Class1 : NSObject {
    id <Class1Delegate> delegate;
}

@end



@interface Class2 : NSObject <Class1Delegate>{

}

@end

@implementation Class2

- (void)class1:(Class1)obj MethodWithArg:(id)arg {
        //do stuff when called from the 1st class
}
@end
1 голос
/ 31 января 2011

В основном вы создаете один или несколько классов, перемещаете код в эти классы и затем создаете экземпляров этих классов в вашем контроллере.

так что если у вас былометод в вашем контроллере представления

-(void)foo;

вы бы создали новый класс скажем C и переместили туда метод.

тогда в вашем контроллере представления вы бы создали переменную экземпляра этого класса, например

C* myC;

, затем alloc / init и затем вызов метода foo.Это не объектно-ориентированное в том смысле, что foo на самом деле никак не связан с C, поэтому метод foo мог бы быть просто статическим методом, не относящимся к экземпляру, и поэтому вызывался так же, как и любой другой метод, а не как [C foo]из [self foo] из контроллера представления.

другой, более метод ООП, заключается в перемещении функциональности, которая принадлежит вместе, в отдельный класс, такой как анимация в вашем примере.

1 голос
/ 31 января 2011

Вы можете посмотреть на это здесь - чтобы создать статические классы в цели c, а затем ссылаться на них в отдельном файле по имени класса - как в контроллере представления, указанном в связанном примере.

В противном случае вы можете просто создать новый класс в отдельном файле .m и затем кодировать его так, чтобы вызывающий метод в другом классе сначала создал экземпляр этого нового класса, а затем вызвал необходимый метод для этого экземпляра.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...