1

我不能说我真的了解 Objective-C 中的内存处理,所以我对此有几个问题。

  • 我必须删除下面框中的对象“url”和“urlRequest”还是“urlConnection”负责这样做?

    NSURL* url = [NSURL URLWithString:url];
    NSURLRequest* urlRequest = [[NSURLRequest alloc] initWithURL:url];
    NSURLConnection* urlConnection = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self];
    
  • 以下对象创建之间有什么区别。是参考。在所有情况下都保留计数器?

    [[NSString alloc] init];  
    [[NSString alloc] initWithFormat:...];  
    [NSString stringWithString:...];  
    
  • 分配属性时,是参考。无论是否将“分配”或“保留”设置为属性,计数始终保留?

4

1 回答 1

1

一般而言,如果您通过以 alloc、new 或 copy 开头的方法获取对象,则您将负责释放该对象。因此,在您的第一个查询中,您需要释放 urlRequest 和 urlConnection。url 对象是您不需要释放的对象的示例,因为它是使用静态工厂方法 (URLWithString) 实例化的。

[[NSString alloc] init];

将初始化一个 NSString ,其 reatin 计数为 1。

[[NSString alloc] initWithFormat:...];  

同样,结果是保留计数为 1 的 NSString。唯一的区别是您调用了不同的初始化程序。

[NSString stringWithString:...];

创建一个自动释放的 NSString,保证在当前事件循环期间保持有效。

至于property属性,assign不会保留传给setter的对象。

我知道这有点枯燥,但内存管理指南是这类问题的一个非常好的参考。

于 2010-03-02T09:02:12.053 回答