Ссылка класса Objective C как свойство - PullRequest
1 голос
/ 02 августа 2011

Это должно быть чертовски легко, но я не могу сам разобраться в синтаксисе.

Не могу правильно сформулировать вопрос, поэтому я не могу найти ответ в Google.(Вы можете понять почему с такими ключевыми словами, как цель c, свойство, класс)

В любом случае.В одном из моих классов я хочу сохранить свойство, которое ссылается на другой класс, а не на экземпляр другого класса.Что вы легко можете сделать с помощью этого кода: @property (nonatomic, assign) Class anotherClass;

Хотя я не хочу использовать универсальный Class.Я хочу использовать свои собственные классы, но я не могу понять, как, думаю, я хотел бы сделать что-то вроде @property (nonatomic, assign) @class(MyOwnClass) myClass;

Ответы [ 4 ]

2 голосов
/ 02 августа 2011

Objective-C не допускает объекты на основе стека. Я не думаю, что вы сможете сделать это. Вам придется хранить указатель на экземпляр класса. class является методом NSObject и возвращает объект Class, который является экземпляром мета-класса. Вот почему он работает только с классом, потому что вы сохраняете экземпляр объекта мета-класса.

1 голос
/ 02 августа 2011

Вы можете использовать пользовательский установщик, который вызывает исключение NSInvalidArgumentException, если значение не соответствует классу, который вы ищете.Вам нужно использовать Class.

. Поскольку в Objective-C каждый аргумент объекта или класса равен id, вы не можете вызвать ошибку компиляции, просто хорошо документируйте свой код.

0 голосов
/ 02 августа 2011

Может быть, я в замешательстве, но не могли бы вы сделать это?

Temp.h

@interface Temp : NSObject
    NSString *myString;
@end
@property(nonatomic,assign) NSString *myString;

Temp.m

#import "Temp.h"
@synthesize myString;

MyNewClass.h

#import "Temp.h"
@interface MyNewClass : NSObject
{
}
-(NSString) returnTemp;
@end

MyNewClass.m

#import "MyNewClass.h"
- (NSString) returnTemp
{
    Temp *myTemp = [[Temp alloc] init];
    [myTemp setMyString:@"hello"];
    return myTemp;
}
0 голосов
/ 02 августа 2011

Objective-C не имеет ничего общего с шаблонами или ковариантными / контравариантными типами возврата . Нет никакого способа сказать: «Я хочу вернуть Class объект, который представляет класс, который является подклассом MyOwnClass». Вы должны использовать общий указатель Class.

...