我创建了一个预处理器定义来为我分配和构造类,如下所示:
#define new(cls) cls* _new() {return [[cls alloc] init];}()
现在我尝试使用它:
- (NSMutableArray*) stack
{
if (!_stack)
{
/*_stack = [[NSMutableArray alloc] init];*/
_stack = new(NSMutableArray);
}
return _stack;
}
但它表示预期的表达式和意外的NSMutableArray
接口。我的定义有什么问题,为什么我不能这样做?还有其他方法可以做到这一点吗?
答案 0 :(得分:2)
只需使用new
:
_stack = [NSMutableArray new];
与
完全相同_stack = [[NSMutableArray alloc] init];
不需要一个会让别人感到困惑的宏。
很长一段时间以来,Apple都不鼓励使用new
,但似乎随着ARC的到来,它甚至在Apple的文档中也重新受到青睐。