我们应该删除;在Objective-c的实施结束时

时间:2013-01-17 12:09:09

标签: objective-c xcode4.5

  

可能重复:
  Semicolon after the method name in Objective-C implementation file

我注意到了两者

- (void)encodeWithCoder:(NSCoder *)aCoder;
{

}

- (void)encodeWithCoder:(NSCoder *)aCoder
{

}

作品。

使用;虽然有点尴尬。为什么;作品超出了我的范围。不适用于C ++

事情something;应与something{};等效,因此something ;{}应与something {};{}等效,这是错误的。

例如if(true)a = b;与if(true){a = b};

相同

3 个答案:

答案 0 :(得分:3)

编译器忽略分号,这只发生在函数名称上。当人们尝试将函数名称从.h(接口)复制到.m(实现)文件时,就会发生这种情况。我在使用目标c时也观察到了相同的情况。

答案 1 :(得分:2)

正如Brad Larson在his answer here中所说:

  

是的,这样做是可以接受的语法。

     

事实上,我总是在我的实现中这样做,因为它就是   从界面复制和粘贴方法定义是微不足道的   实现,反之亦然,而不必记住你在哪里   是。我也可以在单独的行上使用对齐的括号。

同样,Yuji states

  

在语法上可以在那里放一个分号。它没用,   并且不鼓励这样做。一些编译器发出警告   这个额外的分号。

C / C ++ / Java对待;作为语句的结尾,所以每当编译器发现它将它视为行尾时。

编辑:

if(true) a=b;if(true){a=b};

相同

这些不能与上述进行比较。 a=b是一个必须以分号结束的表达式。因此,if(true) a=b;是正确的。 if(true){a=b;}是正确的。但if(true) {a=b};不是,{和}创建一个包含未终止表达式的块,产生语义错误,因此编译器会说ERROR。

答案 2 :(得分:2)

是,

- (void)encodeWithCoder:(NSCoder *)aCoder;
{

}

- (void)encodeWithCoder:(NSCoder *)aCoder
{

}

两者都有相同的含义。

实际上编译器会在函数

之后忽略;

即使你写了

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

}

作为

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
{

}

它有效!