我定义了一个方法,其声明如下所示:
- (BOOL) loadMesh: (Mesh *)mesh fromFile: (NSString *)fileName;
我打算从给定文件加载一个Mesh对象,因此指针“mesh”用作输出参数。但是“网格”总是“零”,虽然在方法中它不是“零”。我认为这是因为ARC在离开方法时释放了“网格”所指向的记忆。
除了使用Mesh *作为方法的返回值之外,还有解决这个问题吗?
答案 0 :(得分:1)
我假设Mesh
为一个类,所以mesh
是一个对象,对吗?而你正试图这样设置:
- (BOOL)loadMesh:(Mesh *)mesh fromFile:(NSString *)fileName
{
mesh = // some code
return YES;
}
Mesh *m = nil;
[self loadMesh:m fromFile:@"foo"];
但是,作为函数参数的mesh
是函数的局部函数,在其作用域之外是不可见的。您必须使用指向它的指针并通过指针设置它,如下所示:
- (BOOL)loadMesh:(Mesh **)mesh fromFile:(NSString *)fileName
{
*mesh = theMesh;
return YES;
}
Mesh *m = nil;
[self loadMesh:&m fromFile:@"foo"];