Указатели Objective C>, указывающие на свойства - PullRequest
4 голосов
/ 15 февраля 2011

У меня есть свойство NSInteger пользовательского класса с именем'timateTime ', теперь в моем классе UITableView я пытаюсь передать это свойство как указатель на UITableViewCell.Я не могу заставить его работать!Я пробовал следующее:

NSInteger *pointer = sharedManager.tempTask.&estimatedTime;
NSInteger *pointer = &sharedManager.tempTask.estimatedTime;

Я получаю ошибки: lvalue требуется как унарный операнд '&' и: ожидаемый идентификатор перед '&' токеном

Можете ли вы не передать указательв собственность?Является ли свойство не только само указанием на ivar в моем пользовательском классе?Мне нужно это как тип указателя, чтобы я мог редактировать значение при изменении UITextField внутри UITableViewCell.

Спасибо и надеюсь, что это имеет смысл!

Ответы [ 4 ]

15 голосов
/ 15 февраля 2011

Свойства не являются переменными;они просто синтаксический сахар для методов в стиле get / set.Следовательно, вы не можете взять адрес свойства.

3 голосов
/ 15 февраля 2011

Как сказал Марсело, вы не можете сделать это, используя само свойство.

Вы должны либо:

  1. Добавить метод к tempTask, который возвращает указатель на estimatedTime iVar (NSInteger *pointer = sharedManager.tempTask.estimatedTimePointer)
  2. Используйте временный NSInteger, беря его адрес для любых необходимых вызовов, затем скопируйте результат в estimatedTime

Вариант 1, вероятно, является действительно плохой идеей , потому что он нарушает инкапсуляцию объекта.

0 голосов
/ 15 февраля 2011

На самом деле, когда вы говорите Object1.Propertyxy.Property1

На самом деле он называется FUNCTION, а не VARIABLE / VALUE в некоторой памяти.

В вашем случае «tempTask» будет действовать как функция, а «timateTime »- как аргумент, а результатом будет ВОЗВРАТ функции.

Я знаю иполностью согласен с тем, что указатели очень удобны для увеличения скорости, но в этом случае это просто бесполезно, так как это потребовало бы хранения этой СОБСТВЕННОСТИ где-нибудь, а затем, ссылаясь на i, просто трата времени и памяти, используйте его только в том случае, если вам нужно использовать этоочень специфическое свойство 100 раз за прогон: D

Надеюсь, это помогло, если бы оно не просто дало мне знать, я буду рад помочь.

0 голосов
/ 15 февраля 2011

Для использования чисел в указателях я бы предложил использовать NSNumber *, а не NSInteger * (NSInteger на самом деле int). Например, если sharedManager.tempTask.estimatedTime является NSInteger, вы можете сделать:

NSNumber *pointer = [NSNumber numberWithInt:sharedManager.tempTask.estimatedTime];

Теперь, когда вы хотите использовать значение int для числа, выполните:

NSInteger i = [n intValue];

NSNumber * является объектом obj-c, поэтому применяются обычные механизмы сохранения / освобождения / автоматического выпуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...