Objective-C - 没有方法的回报可以吗?

时间:2010-12-30 05:53:20

标签: objective-c

我有一个返回对象的方法,比如

- (myObject *) doStuff: (NSString *)x 

此方法在数组上创建一个条目并返回创建的对象,因此在运行该方法后我可以用它做其他事情,但在我的代码中的某些时候我不需要它返回的引用,所以,而不是使用

myObj1 = [doStuff: myValue];

我只想把它变成

[doStuff: myValue];

这样做可以吗?我会遇到崩溃或应用变得疯狂等问题吗? 是否有其他替代方案可以做到这一点?

4 个答案:

答案 0 :(得分:4)

在这方面,Objective-C与C类似:您始终可以忽略函数/方法返回的值。

但是,与C一样,遵循函数或方法定义的语义非常重要。例如,如果函数/方法返回指针并且调用者应该释放相应的内存,则调用者需要将该指针存储在变量中,然后调用free(variable)。类似地,如果函数/方法返回调用者拥有的Objective-C对象,则调用者必须向返回的对象发送-release或-autorelease。

答案 1 :(得分:1)

当然。方法不必返回任何内容,它是完全可选的。这是void返回类型的用途:

- (void)doStuff:(int)myValue;

已编辑添加

如果您只想返回某些内容而该方法通常会返回一个对象,只需返回 nil 即可。您不必提供接收器。

答案 2 :(得分:1)

如果您保证此 doStuff 方法中的内存管理是自我维持的,那么应该没问题。 (即,在使用该方法分配任何新内容时,使用 autorelease 等内容,以便内存不会泄漏)

答案 3 :(得分:1)

- (myObject *) doStuff: x  

这里你需要声明x type also.like

-(myObject *)doStuff:(NSString *)myValue;

然后如果你为函数声明一个返回类型,那么你必须返回一个值,否则将它变为无效。

如果声明一个返回类型,那么在变量中接收该值是不必要的,但函数必须返回该值。

此外,您还可以在此方法中设置数组值,但全局声明数组。如果你做-(myObject *)doStuff:(NSString *)myValue;

,还有一件事

然后它需要一个对象来调用,对于同一个类使用self。 你不能这样打电话

[doStuff: myValue];