Objective c 访问子类实例
我有一个类,其实例变量为Objective c 访问子类实例,objective-c,cocoa,Objective C,Cocoa,我有一个类,其实例变量为NSArray,我知道不同的对象应该从同一个超类继承。我的问题是如何从另一个类(其控制器)访问实例变量和方法,同时确保数组的内容只包含属于某个类的子类的对象?我尝试实现一个最小协议,并将数组中的对象引用为typeid和(id*),但这不允许我访问数组中类的任何实例变量或方法(这是正确的)。 在对象文件中 NSArray* components; // contains subclasses of component 在控制器文件中 subclassofClassObje
NSArray
,我知道不同的对象应该从同一个超类继承。我的问题是如何从另一个类(其控制器)访问实例变量和方法,同时确保数组的内容只包含属于某个类的子类的对象?我尝试实现一个最小协议,并将数组中的对象引用为typeid
和(id*)
,但这不允许我访问数组中类的任何实例变量或方法(这是正确的)。
在对象文件中
NSArray* components; // contains subclasses of component
在控制器文件中
subclassofClassObject* object;
是否有函数、宏、类型定义的子类。。。etc或一种变通方法,以便我可以从控制器的子类引用对象子类中的组件子类。i、 e替换子类的内容。我不太明白您的要求,但以下内容可能会有所帮助: 您可以使用
isKindOfClass:
确定是否有类的实例或其子类之一。例如,给定一个类MyBaseClass
,然后使用强制转换:
id elem = [components objectAtIndex:ix];
if ([elem isKindOfClass:[MyBaseClass class]])
{
// elem is an instance of MyBaseClass or one of its subclasses so cast is safe
MyBaseClass *mbc = (MyBaseClass *)elem;
// now can access methods, properties and public instance variables
// of MyBaseClass via mbc without warnings
...
}
我建议你先考虑一下你的建筑设计。您可以尝试在子类实现中移动逻辑:
@interface BaseClass: NSObject {
}
...
- (void) doMySuperImportantStuff: (id)data;
@end
@implementation BaseClass
...
- (void) doMySuperImportantStuff: (id)data
{
// basic implementation here, or common actions for all subclasses
NSLog(@"BaseClass is here");
}
@end
@interface ClassA: BaseClass
{
NSInteger i;
}
...
@end
@implementation ClassA
...
- (void) doMySuperImportantStuff: (id)data
{
// some specific stuff
NSLog(@"ClassA is here, i=%d", i);
}
@end
@interface ClassB: BaseClass
{
NSString *myString;
}
...
@end
@implementation ClassB
...
- (void) doMySuperImportantStuff: (id)data
{
// another specific stuff
NSLog(@"ClassB is here, myString = %@", myString);
}
@end
// client code example
....
NSArray *list = ...; // list of instances of the subclasses from BaseClass
for(BaseClass *item in list) {
[item doMySuperImportantStuff: userData];
}
请遵守惯例,以大写字母开始类名(以小写字母开始方法名):-)啊。。。铸造我忘了。Yery很有帮助,谢谢。您确定需要
id*
类型的变量吗?这将是指向id
的指针,该id本身已经是指向Cocoa对象的指针。