这个问题出于好奇,而且对于我自己的娱乐而不是它是否是一个好主意,而是来自一个主要是C#/ JavaScript的背景,不断在Objective-C中看到这个让我觉得有点难看:< / p>
MyClass* myObj = [[MyClass alloc] init];
...我很好奇是否有可能定义一个C风格的宏,以便可以将其变为:
MyClass* myObj = new MyClass;
......或者语法相似的东西。
有没有人这样做过或以前见过它?随意评论为什么它可能是一个可怕的想法(除了显而易见的,它是非标准和不熟悉的),但这不会阻止我想知道它是否可以完成。 ;)
答案 0 :(得分:7)
你当然可以做到这一点:
#define new(x) [[x alloc] init]
MyClass *myObj = new(MyClass);
如果你需要在没有括号的情况下这样做,我认为你运气不好。
NSObject
提供了new
类方法。所以你可以做到这一点,如果你碰巧更喜欢它:
MyClass *myObj = [MyClass new];
这是relevant documentation的链接。
答案 1 :(得分:1)
如果可以使用
,为什么要写MyClass *myObj = new(MyClass);
#define createObject(className, objectName) className *objectName = [[className alloc] init]
和
createObject(NSObject, obj);
您的代码肯定变得更不易读。然后,您可以为其他初始化工具创建宏,例如initWith...:
仅仅因为可以做某事,并不意味着它应该。编写可读代码通常是个好主意,而不是短代码。