Я передаю ivar (NSMutableArray) в какой-то метод. Я ожидал, что если я изменю объект внутри функции, это будет отражено вне функции, но в этом случае мне нужно установить объект; что-то вроде следующего:
- (void) someMethod:(SMResponseObject *)response onData:(NSMutableArray *)imAnIvar {
imAnIvar = [response objects];
//Some other stuff
}
Но я заметил, что ссылка на память imAnIvar внутри функции меняется, когда я ее устанавливаю, и, учитывая это, фактический ivar не меняется. Я понимаю, что проблема в том, что я меняю ссылку на объект внутри метода, поэтому он перестает указывать на ивар, а затем указывает на какое-то другое случайное направление памяти.
Я подумал об одном решении этой проблемы, и оно может заключаться в том, чтобы перед вызовом функции убедиться, что ivar не равен нулю, и сделать что-то вроде этого:
- (void) someMethod:(SMResponseObject *)response onData:(NSMutableArray *)imAnIvar {
NSMutableArray *data = [response objects];
[arrayForTableView removeAllObjects];
for(id element in data){
[imAnIvar addObject:element];
}
//Some other stuff
}
Поэтому я использую исходный объект вместо того, чтобы устанавливать его напрямую. Проблема в том, что для того, чтобы это работало, мне нужно убедиться, что ivar не равен нулю, что, я думаю, не является чистым, потому что мне нужно будет делать что-то подобное при каждом вызове метода:
if(!_ivar){
//alloc it
}
Итак, мой вопрос: есть ли способ заставить локальную переменную области видимости указывать на исходную переменную, даже если я ее устанавливаю? если нет, есть ли более чистый способ сделать эту работу?