objective-c – 使用点语法设置retain属性时使用自动释放?

前端之家收集整理的这篇文章主要介绍了objective-c – 使用点语法设置retain属性时使用自动释放?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一些示例代码中看到使用自动释放.在需要时我不熟悉这些实例.例如,如果我创建一个注释对象

文件

@interface someViewController: UIViewController 
{
    Annotation *annotation;
}

@property (nonatomic,retain) Annotation *annotation;

@end

实施文件

@implementation someViewController
@synthesize annotation
@end

问题:如果我在实现文件中初始化我的注释对象,这是正确的方法吗?

self.annotation = [[Annotation alloc] initWithCoordinate:location];

我需要为此设置自动释放吗?或者我可以按正常方式执行此操作并在dealloc方法添加发布吗?

解决方法

这是对的:

self.annotation = [[[Annotation alloc] initWithCoordinate:location] autorelease];

因为annotation属性被声明为retain属性,所以赋值将增加其保留计数.

你也需要在-dealloc中发布self.annotation.

简而言之:

> init将retain count设置为1;
>分配给self.annotation,将其设置为2;
>当再次执行主循环时,autorelease会将其设置为1;
>在dealloc中释放会将retain count设置为0,这样对象就会被释放);

在我看来,考虑自动释放的最佳方法如下:autorelease将在未来的某些(接近)点“安排”对象的“自动”释放(通常在控制流程返回主循环时,但是细节隐藏在Apple手中).

autorelease主要与init结合使用,特别是在以下情况下:

>当你初始化一个局部变量时,你不必在它超出范围之前显式释放它(主循环会为你做这个);
>当你返回一个指向你刚刚创建的对象的指针而不保留它的所有权时(创建/生成*类型的选择器的典型情况,接收者需要保留它以获得所有权);
>具有保留的属性,当您为它们分配一个它们应该唯一拥有的对象时;
>使用增加保留计数的数据结构(NSMutableArray,NSMutableDictionary等):当您将​​新的对象添加到此类数据结构时,通常应自动释放该对象.

除了案例2之外,很明显自动释放的使用意味着提高代码的可读性并减少错误的可能性(这意味着在所有其他情况下,您可以简单地在分配后或在范围的结束).

使用属性时,您始终要检查它们是保留还是分配/复制大小写;在第一种情况下,将新的对象分配给属性通常需要自动释放.

无论如何,我建议至少略读memory management for iOS中的许多教程之一.

原文链接:https://www.f2er.com/c/116781.html

猜你在找的C&C++相关文章