0

假设我在 .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?

}
  1. 2在第一个代码中,我需要在 dealloc 中释放 viewLoading 吗?如果我不申报它的财产会怎样?

  2. 在第二个代码中,它与第一个代码有相同的效果吗?(是否需要解除分配)。

  3. 对于第三个代码,它与第一个代码有相同的效果吗?在我编码之后我应该做什么?(见评论)

  4. iPhone 代码是否总是需要释放 .h 中声明的变量?还是仅在分配 .h 中声明的变量时才分配?如果像在第一个代码中一样,我需要解除 viewLoading 吗?

  5. 有什么不同

    self.viewloading = viewLoading2;

viewloading = viewLoading2; 

谢谢

4

1 回答 1

3

在第一个示例中,您分配了对象(一次),然后释放了它(一次),因此您无需执行任何其他操作。另一方面,一旦您将发布版本发送到 viewLoading2,viewLoading 就无效,因此它不是很有用的代码。

在第二个中,您还没有发布 viewLoading,所以它确实需要最终完成。

第三,分配通过参数传递给此方法的对象的任何代码负责释放它。它应该在此方法的持续时间内有效,但是如果您将其保存以供以后使用,则需要将其保留在此处,然后在完成后将其释放。

编辑:

我不确定我是否理解您的问题 4。接口 (.h) 文件中的声明只是为指针保留空间。它不是对象声明,因此在您实际进行对象分配之前不需要释放。

self.viewloading = viewLoading2正在使用属性设置器方法进行分配。如果@property 语句中包含“保留”,则保留作为该分配的一部分完成。`viewloading = viewLoading2" 是直接赋值,没有保留。

于 2011-10-27T02:14:37.940 回答