2012-03-10 59 views
0

问题#1 将NSStringFromCGPoint()返回一个autorelease对象还是该对象需要释放?NSStringFromCGPoint是否返回一个自动释放对象?

问题2 当你有一个属性:@property (nonatomic, retain) NSString *someString; 并设置它像这样:self.someString = [[[的NSString页头] initWithString:@ “东西”]自动释放]。

是这样的:

[someString release]; 
someString = nil; 

等于

self.someString = nil; 

回答

1
  1. 我没有检查一个明确,但是按照惯例,功能的那些五花八门返回自动释放的对象。您可以通过设置一个最小的非ARC项目并针对您获得的功能调用-retainCount来自行测试,但我不确定。 (并且一般而言,retainCount不是您想要使用的东西。)

  2. 是的。合成的setter看起来像:

    - (void)setSomeString:(NSString *)string 
    { 
        if (string != someString) { 
         [someString release]; 
        } 
        someString = [string retain]; 
    } 
    

所以,不管你叫它明示或使用点符号,旧的价值得到释放(和潜在的伊娃被设置为nil或任何你传递) 。

此外,我不确定是否只是为了随机的例子,但是您不必在内存管理代码中包装字符串文字以将其传递给属性访问器。 (即,self.someString = @"Something"很好。)

+2

[永远不要使用'retainCount'](http://www.friday.com/bbum/2011/12/18/retaincount-is-useless/)。决不。永远。永远不能。独角兽会哭泣,小猫会受伤。不要这样做。 – 2012-03-10 22:20:57

+0

这只是一个例子,谢谢你的明确答案,我接受它,你可以看到。 – Mark 2012-03-10 22:21:19

+0

我们不能用独角兽眼泪来治疗小猫吗? =/ – JustSid 2012-03-10 22:46:55

1

该调用是否包含术语“新建”,“alloc”,“复制”或“创建”?如果没有,你会找回一个你不拥有的对象(你可能认为它是自动发布的或者该引用是其他地方拥有的)。