我有一个返回对象的方法,比如
- (myObject *) doStuff: (NSString *)x
此方法在数组上创建一个条目并返回创建的对象,因此在运行该方法后我可以用它做其他事情,但在我的代码中的某些时候我不需要它返回的引用,所以,而不是使用
myObj1 = [doStuff: myValue];
我只想把它变成
[doStuff: myValue];
这样做可以吗?我会遇到崩溃或应用变得疯狂等问题吗? 是否有其他替代方案可以做到这一点?
答案 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];