2015-04-16 3 views
0

Я создаю объект, который я установил для nil по умолчанию, прежде чем включать его в метод в качестве параметра. Я делаю чек позже, если объект по-прежнему равен нулю или нет. Объект установлен для изменения в методе, но результат по-прежнему равен нулю. Я ожидаю, что метод сможет изменить объект nil. Если у меня есть код, находящийся внутри метода, замените вызов метода, это приведет к тому, что он НЕ равен нулю.Передача указателя объекта nil в Objective-C

MyObject *objectTemp = nil; 

[self methodCallWithObject:objectTemp]; 

if (objectTemp == nil) NSLog(@"nil"); 
else NSLog(@"NOT nil"); 

// always results in "nil" 

метод:

-(void) methodCallWithObject:(MyObject)objectTemp { 

    objectTemp = [NSValue valueWithCGPoint:CGPointMake(5.3f, 2.6f)]; 

} 
+1

Дубликат этого: http://stackoverflow.com/questions/11737505/objective-c-pass-by-value-and -pass-by-reference –

ответ

4

Для того, чтобы изменить objectTemp вне метода, вы должны пройти указатель к objectTemp, что означает, что methodCallWithObject на самом деле нужно взять указатель на указатель:

-(void) methodCallWithObject:(MyObject **)objectTemp { 
    *objectTemp = [NSValue valueWithCGPoint:CGPointMake(5.3f, 2.6f)]; 
} 

(Тем не менее, было бы разумнее, если бы methodCallWithObject просто вернул новый объект.)

+1

Что он сказал! На самом деле проблема заключается в понимании того, какие указатели и объекты ... – matt

Смежные вопросы