【问题标题】:Is assigning self.string = @"" on an @property that's (retain)'d proper?是否在(保留)正确的@property 上分配 self.string = @"" ?
【发布时间】:2011-11-03 23:02:41
【问题描述】:

一个哲学问题。将常量字符串分配给(保留的)@property 是否合适?或者,我应该做self.string = [NSString stringWithString:@""]

是否存在内存泄漏?如果它被过度发布怎么办?

它是一个常量字符串,那么它的行为方式是否与 NSString 对象相同?

如果属性是 (assign) 是否意味着它在运行循环后将无效?

【问题讨论】:

    标签: objective-c reference-counting retaincount


    【解决方案1】:

    是的,没关系。不管你用哪种方式,常量字符串仍然会被编译到你的程序中(因为无论如何你必须在[NSString stringWithString:@""]中使用它)。常量字符串实际上并没有被保留/释放,但重要的是它的语义:你正在分配一个字符串(就你而言,它有一个净 +0 保留计数 - 你没有alloc编辑它,所以你不拥有它)到将拥有它的财产。如果属性是(assign),那么它仍然可以使用常量字符串,但在自动释放池耗尽后,它在语义上将无效。

    【讨论】:

    • 同意。任何形式的[NSString stringWithString:@"..."] 都没有充分的理由。这只是浪费循环而一事无成。
    • @Rob Napier:使用它的唯一原因是当你有一个可变字符串时。这就像 -copy 的 +0 替代品。
    • 我认为 Rob 的意思是没有理由将 literal 传递给 stringWithString:
    • 对;我不是在辩论+stringWithString:。只需将@"..." 常量字符串传递给[NSString stringWithString:]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2011-12-09
    相关资源
    最近更新 更多