【问题标题】:implementing convenience constructors for automatic reference counting实现自动引用计数的便利构造函数
【发布时间】:2011-09-22 15:29:03
【问题描述】:

如果没有自动引用计数,您在添加新类时通常会编写这样的代码:

假设类名是“Foo”

+ (id) foo
{
    return [[[self alloc] init] autorelease];
}

- (id) init
{
    self = [super init];
    // do some initialization here
    return self;
}

那么,你应该如何为 arc 编写这个? 就像下面的代码一样?

+ (id) foo
{
    return [[self alloc] init];
}

- (id) init
{
    self = [super init];
    // do some initialization here
    return self;
}

【问题讨论】:

  • 请注意,您应该在便利构造函数中真正使用self 而不是Foo,这样子类才能正常工作。见,例如stackoverflow.com/questions/5987969/…
  • 是的,你是对的,我在实际代码中这样做,只是在示例代码中完全忘记了它。会修复的。

标签: objective-c automatic-ref-counting


【解决方案1】:

是的。你期待不同的东西吗?

【讨论】:

  • 好吧,我只是想知道,因为我没有在 arc 中找到任何关于便利构造函数的特殊信息。有趣的是,现在使用这两种变体中的哪一种几乎没有区别。
  • 我希望 ARC 的 +new 在被忽略这么久之后会复活。
  • 在构造函数的开头是否有“init”这个词不是很重要吗?
  • 不适用于内存管理。您想到的神奇词是+alloc(有关更多信息,请参见robnapier.net/blog/three-magic-words-6)。 -init… 确实为返回的id 的处理方式创造了一些魔力(编译器假定它是传递给+alloc 的类)。 instancetype 的添加解决了非初始化构造函数的问题。 nshipster.com/instancetype
猜你喜欢
  • 1970-01-01
  • 2015-03-15
  • 2017-06-26
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
相关资源
最近更新 更多