假设我在.h中声明了UIView viewLoading。我不直接初始化它(在第一个代码中)。
第一个代码。
UIView *viewLoading2 = [[[UIView alloc] initWithFrame:CGRectMake(75 , 155, 170.0, 170.0)]];
viewLoading = viewLoading2;
[viewLoading2 release]
第二个代码:
viewLoading = [[[UIView alloc] initWithFrame:CGRectMake(75 , 155, 170.0, 170.0)]];
第三条守则:
- (void) viewLoad:(UIView *) viewLoading2
{
viewLoading = viewLoading2;
//do i need to retain, alloc, or release something here?
}
2在第一个代码中,我是否需要在dealloc中释放viewLoading?如果我不申报其财产会怎样?
在第二个代码中,它与第一个代码有相同的效果吗? (需要dealloc与否)。
对于第三个代码,它与第一个代码有相同的效果吗?我编码之后该怎么办? (见评论)
iPhone代码是否总是需要释放在.h中声明的变量?或者只有在.h中声明的变量被分配?如果喜欢在第一个代码中,我是否需要dealloc viewLoading?
之间有什么不同
self.viewloading = viewLoading2;
和
viewloading = viewLoading2;
由于
答案 0 :(得分:3)
在第一个示例中,您分配了对象(一次),然后释放它(一次),因此您不需要执行任何其他操作。另一方面,只要将发布版本发送到viewLoading2,viewLoading就无效,因此代码不是很有用。
在第二种情况下,你还没有发布viewLoading,所以最终确实需要这样做。
在第三个中,无论分配通过参数传递给此方法的对象的代码都负责释放它。它应该在此方法的持续时间内有效,但如果您将其保存以供以后使用,则需要将其保留在此处,然后在完成后将其释放。
编辑:
我不确定我理解你的问题4.接口(.h)文件中的声明只是为指针保留空间。它不是对象声明,因此在您实际进行对象分配之前不需要释放。
self.viewloading = viewLoading2
正在使用属性setter方法进行分配。如果@property语句中包含“retain”,则保留将作为该赋值的一部分完成。 `viewloading = viewLoading2“是一个直接的赋值,没有保留。