0

我有一个名为 City 的超类和一堆从这个类继承的子类。例如伦敦和纽约。这些子类中的每一个都有自己独特的方法和实例变量。

当我的应用程序启动时,我对当前位置进行地理编码并根据我当前所在的城市实例化子类。

现在我定义了多个属性来访问这些类,所以

@property (nonatomic, strong) London *london;
@property (nonatomic, strong) NewYork *newYork;
...
...

我在任何时候都只需要一个这种类型的对象,所以只希望定义一个属性来访问这个对象。就像是

@property (nonatomic, strong) City *city;

有没有一种方法可以动态创建我需要的子类而无需声明多个属性?

4

2 回答 2

2

您绝对可以在 Objective-C 中实现子类。您可以执行以下操作来实例化一个城市:

self.city = [[NewYork alloc] init];

调用特定于城市的方法:

if ([self.city isKindOfClass:[NewYork class]])
{
      // call some NewYork methods e.g..
      [(NewYork *)self.city doNewYorkThing];
}
else if ([self.city isKindOfClass:[London class]])
{
      // call some London methods e.g.
      [(London *)self.city doLondonThing];
}

“isKindOfClass:”、“isMemberOfClass:”、“conformsToProtocol:”和“respondsToSelector:”方法是您熟悉的有用的类方法。

于 2012-05-19T16:08:11.260 回答
1

“动态地”是一个灵活的概念。:) 你当然可以写类似...

self.city = [[London alloc] init];

...然后使用 City 中定义的任何方法。如果 London 定义了自己的实现,您将获得这些方法的覆盖版本。如果你真的真的知道它是伦敦的物体,你也可以这样做:

[(London *)city somethingSpecial];
于 2012-05-19T15:53:54.287 回答