2009-02-26 4 views
7

Я видел много разговоров о динамической типизации в объективе-c. Но я не видел никаких примеров того, что, по моему мнению, должно быть.Как распределить динамический типизированный объект

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

Пожалуйста, не стесняйтесь интерпретировать это, как хотите, если вы думаете, что это что-то объяснит !!

Если класс выбран во время выполнения, как я могу справиться с списком аргументов (? Теперь является заполнителем) Как распределить объект, класс которого не определен до выполнения?

-(void) juggle:(?*)objclass1:(?*)objclass2{ 

? temp = [? alloc] init]; 
objclass1 = temp; 
[temp release]; 

[objclass2.view removefromsuperview]; 
[self.handle insertsubview:objclass1.view]; 

} 

ответ

19

Я понятия не имею, что код, который вы там пытаетесь сделать, это не является синтаксически правильным, и манипулировать мнениями не имеет ничего общего с вашими вопросами. В любом случае, если вы действительно не знаете тип, в котором вы обычно используете «id», который вводится типа «void *» для codegen. Он имеет специальное свойство, которое предполагается получать любым сообщением, поэтому оно не вызывает предупреждения компилятора для неизвестных сообщений.

Чтобы создать экземпляр класса, вам просто нужно удерживать объект класса. В Objective C все экземпляры класса относятся к объекту Class (указатель isa в устаревшей среде исполнения), который также реагирует на методы. Иными словами, в следующем коде:

NSArray *myObject = [[NSArray alloc] init]; 

NSArray - фактически объект. Таким образом, это будет генерировать эквивалентные результаты код:

Class myClass = [NSArray class]; 
NSArray *myObject = [[myClass alloc] init]; 

или даже

Class myClass = NSClassFromString(@"NSArray"); 
NSArray *myObject = [[myClass alloc] init]; 

, который использует функцию NSClassFromString, которая ходит в исполняющей и находит класс с именем вы передаете в

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

- (void) leakObjectWithSameClassAs:(id)object { 
    [[[object class] alloc] init]; 
} 
+0

Ха, да, я знаю, что это не было синтаксически правильным и что взгляды бросаются туда willy nilly. Я должен был сказать, что примером был подкаранный psuedo-код. И все же вам удалось ответить на мой вопрос. Спасибо – 2009-02-26 06:10:03

+0

Вы должны написать это как «Класс myClass = [NSArray class]». Вы можете использовать это имя самостоятельно, когда оно является целью сообщения. –

+0

Это то, что я получаю для этого поздно ночью в текстовом поле в Интернете ;-) –

0

Это то, что я есть сейчас

- (void)flipfromv1tov2:(UIViewController*)v1:(NSString*)nib1:(UIViewController*)v2{ 

    if(v1 == nil) 
    { 
     UIViewController *newview = [[[v1 class] alloc] initWithNibName:nib1 bundle:nil]; 
     v1 = newview; 
     [newview release]; 
    } 
    [v2.view removeFromSuperview]; 
    [self.view insertSubview:v1.view atIndex:0];  
} 

Я не могу проверить это еще потому, что у меня есть проблема связующую ... Я добавил эту FUNC в мой корневой контроллер, но по какой-то причине я получаю предупреждение о том, что функция неявно объявлено. И сборка не работает, потому что вызов функции никогда не связан с чем-либо.

+0

hmm func name - обратная замена v1 с v2 – 2009-02-26 06:49:50

Смежные вопросы