2013-06-11 9 views
0

я определил один метод, для которого заявление выглядит следующим образом:Использование указателя в качестве выходного параметра метода в Objective C

- (BOOL) loadMesh: (Mesh *)mesh fromFile: (NSString *)fileName; 

я намерен его загрузить один объект Mesh из данного файла, так что указатель «сетка» используется как выходной параметр. Но «сетка» всегда «ноль», хотя внутри метода это не «ноль». Я думаю, это потому, что ARC выпустила память, на которую указывает «сетка» при выходе из метода.

Есть ли способ решить эту проблему, кроме использования Mesh * в качестве возвращаемого значения метода?

ответ

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"]; 
Смежные вопросы