Как передать значения по ссылке в объекте C (iphone)

У меня есть очень простой вопрос. Я новый программист на iPhone. Мой вопрос в том, может ли кто-нибудь сказать мне, как я могу передавать значения по ссылке на функцию в obj. C? Я знаю, как это сделать в VB и C #. Но не знаю, как это сделать в Obj c.

благодаря

Передача по ссылке в Objective-C такая же, как и в C.

Это эквивалентно следующему C # -коду:

void nullThisObject(ref MyClass foo) { foo = null; } MyClass bar = new MyClass(); this.nullThisObject(ref bar); assert(bar == null); 

является

 - (void)nilThisObject:(MyClass**)foo { [*foo release]; *foo = nil; } MyClass* bar = [[MyClass alloc] init]; [self nilThisObject:&bar]; NSAssert(bar == nil); 

а также

 - (void)zeroThisNumber:(int*)num { *num = 0; } int myNum; [self zeroThisNumber:&myNum]; NSAssert(myNum == 0); 

В Objective C. нет передачи по ссылке (в смысле C ++). Вы можете передавать свои объекты по указателю, а для примитивных типов – по значению.

Пример:

 void func(NSString* string) { ... } void func(NSInteger myint) { ... } .. NSString* str = @"whatever"; NSInteger num = 5; func(str); func(num); 

Если вы используете Objective C ++, который вы можете сделать, указав свой файл с расширением .mm или сообщив Xcode, чтобы скомпилировать весь исходный код как Objective C ++, вы можете передавать ссылки так же, как с C ++, например:

 - (OSStatus) fileFileInfo: (FileInfo&)fi; 

Попробуйте так:

  -(void)secondFunc:(NSInteger*)i { *j=20; //From here u can change i value as well //now i and j value is same (ie i=j=20) } -(void) firstFunc { NSInteger i=5; [self secondFunc :&i]; //i value is 20 } 

Надеюсь, поможет!!

Смотря что ты имеешь в виду. Ближайшей вещью C (и, следовательно, Objective-C) является ссылочный тип – указатели. Как следует из названия, указатели указывают на данные, которые существуют где-то в другом месте. Чтобы получить указание на то, что вам нужно, вы должны разыменовать указатель. Объекты Objective-C никогда не доступны напрямую – вы всегда используете указатели, чтобы разговаривать с ними. Вы также можете передавать указатели на другие типы, кроме объектов.

Указатели – это сложный вопрос. Я определенно рекомендую читать на C, чтобы почувствовать их.

Существует аргумент, который нужно иметь, если вы хотите получить более одного адреса из результирующего вызова функции. Вы можете сделать это вместо этого, создав class-оболочку и передав это вместо этого. Например:

 @interface AddressWrapper : NSObject { NSArray *array; NSString *string; } @property (nonatomic, assign) NSArray *array; @property (nonatomic, assign) NSString *string; @end 

В * .m:

 @implementation AddressWrapper @synthesize array, string; @end -(void) getAddresses: (AddressWrapper*) wrapper { wrapper.array = myNSArray; wrapper.string = myNSString; } 
  • Преобразование в абсолютное значение в Objective-C
  • Хорошие ресурсы для обучения Objective-C
  • Как я могу создать базовый UIButton программно?
  • Зачем подчеркивать «_» перед именами переменных в Objective C
  • Неформальный протокол В объективе-C?
  • alloc, init и new в Objective-C
  • Почему я должен называть self =
  • Можно ли использовать isKindOfClass: против экземпляра NSString для определения типа?
  • Различия между сильными и слабыми в Objective-C
  • (objective C) В чем преимущество использования @synthesize myvar = _myvar (если есть)?
  • Зачем использовать слабый указатель для делегирования?
  • Interesting Posts

    Заземление перед / пока вы строите компьютер

    C # настройка / получение свойств classа по имени строки

    Custom Vim Highlighting (работает только с определенными типами файлов)

    Кэширование изображений в Интернете

    Переместите пользовательский каталог Windows 7 в D: \ user

    Как избежать System.IO.PathTooLongException?

    В чем разница между использованием ARAnchor для вставки узла и непосредственной вставкой узла?

    Есть ли Mutex в Java?

    Google отображает название сайта по-разному в результатах поиска

    Совместное использование локальной сети между двумя зданиями. Что я должен использовать?

    Выйти из tmux-сервера и завершить все запущенные процессы

    Пункт меню Android 4.3 showAsAction = “always” игнорируется

    В чем разница между «используемым пространством», «размером» и «размером на диске»?

    Почему я не могу получить общее исключение в C #?

    Как исправить поврежденную / поврежденную файловую систему NTFS без потери данных?

    Давайте будем гением компьютера.