【问题标题】:About NSObject release关于 NSObject 发布
【发布时间】:2013-03-26 09:51:17
【问题描述】:

对不起我的英语...

在“.h”文件中

NSString *_name;

在“.m”文件中

-(id)init{

.....

_name = [[NSString alloc] initWithString:@"Hadrian"];

.....

}

还有一个函数用来改变 _name 的值,如下所示:

-(void) changeName:(NSString *)name{

    //No 1:

    _name = [name copy];

    //No 2:

    if(_name) [_name release];

    _name = [name copy];

}

没有 1 导致泄漏?这个功能标准怎么写?

【问题讨论】:

  • 为什么不使用@property / @synthesize?

标签: ios nsstring


【解决方案1】:

建议...

  • @property 和@synthesize :如果你使用@property / @synthesize,getter/setter 由 他们。你不需要处理它。 (使用功能而不是长 代码)

    也请看Inject IOS的回答

    • 属性强制执行访问限制(例如只读)
    • 属性强制执行内存管理策略(保留、分配)
    • 属性(很少)用作线程安全策略(原子)的一部分
    • 属性提供了透明地实现自定义 setter 和 getter 的机会。
    • 使用单一方式访问实例变量可提高代码可读性。
  • 命名约定:避免在变量名前加上 _ 前缀,以免与自动生成的访问器发生冲突。否则有合成为 在此link by Kelan

  • 显示和解释
  • 泄漏:您在分配对象或创建副本时拥有该对象。这意味着您将获得保留计数为 1 的对象(不是 自动发布)。你有责任,你应该释放它,当你 已经使用了那个对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-03
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多