2

这个问题是出于好奇,为了我自己的乐趣,而不是它是否是一个好主意,而是来自一个主要是 C#/JavaScript 的背景,在 Objective-C 中不断地看到这个让我觉得有点难看:

MyClass* myObj = [[MyClass alloc] init];

...我很好奇是否可以定义一个 C 风格的宏,这样它就可以变成这样:

MyClass* myObj = new MyClass;

...或语法相似的东西。

有没有人这样做过或见过这样做过?随意评论为什么这可能是一个可怕的想法(除了明显的不标准和不熟悉的想法),但这不会阻止我想知道它是否可以完成。;)

4

2 回答 2

7

你当然可以完成这项工作:

#define new(x) [[x alloc] init]
MyClass *myObj = new(MyClass);

如果你需要在没有括号的情况下这样做,我认为你不走运。

NSObject不过提供了一个new类方法。所以你已经可以这样做了,如果你碰巧更喜欢它:

MyClass *myObj = [MyClass new];

这是相关文档的链接。

于 2013-03-02T00:42:04.120 回答
1

MyClass *myObj = new(MyClass);如果可以使用,为什么要写

#define createObject(className, objectName) className *objectName = [[className alloc] init]

createObject(NSObject, obj);

您的代码肯定会变得更不可读。然后,您可以为其他初始化程序创建宏,例如initWith...:

仅仅因为可以做某事,并不意味着它应该做。编写可读代码而不是短代码通常是一个好主意。

于 2013-03-02T02:41:55.773 回答