使用#define分配

时间:2014-01-12 17:48:42

标签: objective-c

我创建了一个预处理器定义来为我分配和构造类,如下所示:

#define new(cls) cls* _new() {return [[cls alloc] init];}()

现在我尝试使用它:

- (NSMutableArray*) stack
{
    if (!_stack)
    {
        /*_stack = [[NSMutableArray alloc] init];*/
        _stack = new(NSMutableArray);
    }
    return _stack;
}

但它表示预期的表达式和意外的NSMutableArray接口。我的定义有什么问题,为什么我不能这样做?还有其他方法可以做到这一点吗?

1 个答案:

答案 0 :(得分:2)

只需使用new

_stack = [NSMutableArray new];

完全相同
_stack = [[NSMutableArray alloc] init];

不需要一个会让别人感到困惑的宏。

很长一段时间以来,Apple都不鼓励使用new,但似乎随着ARC的到来,它甚至在Apple的文档中也重新受到青睐。