检查是否已在iOS中实例化类

时间:2012-12-15 23:29:56

标签: ios

我正在尝试检查某个类是否已在iOS中实例化。如果已经实例化,那么我想释放它。

类似

for (UIView* views in self.view.subviews) {
        if ([views isKindOfClass:[CCGLView class]])
            [views removeFromSuperview];
    }

因为那时我已经知道它是某种类型的UIViews,但我该如何检查其他类?

1 个答案:

答案 0 :(得分:0)

  

我正在尝试检查是否已在iOS中实例化了一个类。

你不需要。 Objective-C允许您在没有任何不良副作用的情况下发送消息。此外,子视图不允许为nil,因为它们被添加到内部NSMutableArray中,而NSMutableArray又不允许将nil指针添加到自身。

  

因为那时我已经知道它是某种类型的UIViews,但我该如何检查其他类?

如果你想要发布每个UIView(和相关的子类),你不需要在比较中具体,因为基类(UIView)是声明removeFromSuperview的基类,反过来,解决了问题的解除分配部分。当视图从其超级视图中删除时,它的引用计数减少一个。

现在我有更多的背景,你所要求的是微不足道的。如果您使用ARC,此处的代码段将找到CustomClass类型的所有对象,然后将它们设置为nil。

for (NSObject *object in self.someCollection) {
    if ([object isKindOfClass:[CustomClass class]])
        object = nil;
}

如果您正在使用MRC(如果您正在使用,那么您的错误是什么?),那么您实际应该检查它是否为活动实例。

for (NSObject *object in self.someCollection) {
    if ([object isKindOfClass:[CustomClass class]] && object != nil) {
        [object release];
    }
}