请查看以下代码并提出最佳方法。我无法确定代码是否正确。将对象添加到数组时,它们是否会获得保留计数?在第二个函数中,我是否发布了局部变量“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];
}
答案 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];
}
哦,通过“类属性”,我假设你的意思是“实例变量”?