如何在不使用属性或ivar的情况下引用对象

时间:2012-03-29 17:06:59

标签: objective-c ios object

如果我使用以下内容在子视图集合中添加UIView子类:

-(void)loadOutlet
{
    myOutlet *out = [[myOutlet alloc] init];
    [self addSubview:out];
    [out release];
}

-(void)unloadOutlet
{
    myOutlet *out = <<HOW CAN I REFERENCE IT FROM subviews array?>>
    [out removeFromSuperView];
}

这是最好的做法吗?

从现在开始,我使用isKindOfClass为每个子视图查找使用循环,但是没有更好的方法吗?

感谢。

2 个答案:

答案 0 :(得分:6)

您可以为子视图指定标签,然后使用相同的标签检索它。

-(void)loadOutlet
{
    myOutlet *out = [[myOutlet alloc] init];
    out.tag = 1; // Or some other value
    [self addSubview:out];
    [out release];
}

-(void)unloadOutlet
{
    myOutlet *out = [self viewWithTag:1];
    [out removeFromSuperView];
}

答案 1 :(得分:0)

可替换地:

NSArray *currentSubViews = [self.subviews copy];

// Loop through each subview
for (id subview in currentSubViews) {

    // Check the Objective-C class of this object
    if ([subview isKindOfClass:[myOutlet class]]) {

        // Remove the superview
        [subview removeFromSuperView];
    }
}

Objective-C的动态特性是一个很好的工具。