如何释放存储在数组中的对象?

时间:2010-07-22 19:45:16

标签: objective-c arrays event-handling

请查看以下代码并提出最佳方法。我无法确定代码是否正确。将对象添加到数组时,它们是否会获得保留计数?在第二个函数中,我是否发布了局部变量“mySubview”或原始对象?

    // this is a class property
    myArray = [[NSMutableArray alloc] init];    


    - (void)createSubview
    {
        UIView *mySubview = [[UIView alloc] init];
        [self addSubview:mySubview];


        [myArray addObject:mySubview];

    }

    -(void)eventHandler:(NSNotification *) notification
    {
        UIView *mySubview = [notification object];

        [myArray removeObjectIdenticalTo:mySubview];

        [mySubview removeFromSuperview];
        [mySubview release];
    }

1 个答案:

答案 0 :(得分:2)

  

向阵列添加对象时,请执行此操作   获得保留计数?

  

在第二个功能中,我发布了   局部变量“mySubview”或者   原始对象?

UIView *mySubview;'定义了一个局部变量mySubview,它是一个指向 - UIView类实例的引用。 Objective-C中没有“本地对象”或“堆栈对象”(除了块,但这超出了这个问题的范围)。

所以,不,当您致电[mySubview release]时,您要将-release发送到UIView中包含的notification个实例。

release正在平衡retain隐含的alloc。这根本不是正确的模式。你应该做点什么:

- (void)createSubview
{
    UIView *mySubview = [[UIView alloc] init];
    [self addSubview:mySubview];
    [myArray addObject:mySubview];
    [mySubview release];
}

-(void)eventHandler:(NSNotification *) notification
{
    UIView *mySubview = [notification object];
    [myArray removeObjectIdenticalTo:mySubview];
    [mySubview removeFromSuperview];
}

哦,通过“类属性”,我假设你的意思是“实例变量”?