Я передаю ivar (NSMutableArray) в какой-то метод. Я ожидал, что если я изменю объект внутри функции, он будет отражен вне функции, но в этом случае мне нужно установить объект; что-то вроде следующего:Как передать ivar в функцию и установить ее, не теряя ссылку на исходный объект
- (void) someMethod:(SMResponseObject *)response onData:(NSMutableArray *)imAnIvar {
imAnIvar = [response objects];
//Some other stuff
}
Но я заметил, что ссылка на память о imAnIvar внутри функции меняет, когда я установил его, и учитывая, что фактическое Ивар не меняется. Я понимаю, что проблема в том, что я изменяю ссылку на объект внутри метода, поэтому он перестает указывать на 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
}
Так я использую исходный объект вместо устанавливая его напрямую. Проблема в том, что для того, чтобы это работало, мне нужно убедиться, что ивар не ноль, который, я думаю, не чист, потому что мне нужно будет сделать что-то подобное при каждом вызове метода:
if(!_ivar){
//alloc it
}
Итак, мой вопрос: есть ли способ заставить локальную переменную области указывать на исходную переменную, даже если я ее настраиваю? если нет, есть ли более чистый способ сделать эту работу?
«Я заметил, что обращение к памяти о imAnIvar внутри функции изменяется, когда я установите его "- WAT? –
Извините, я изменю его, чтобы сделать его более понятным. – clopez
, если вы допустили явную ошибку, затем посмотрите мой ответ и обратите внимание, что в C аргументы функции передаются по значению, а не по ссылке. –