Objective-C указатели и свойства - PullRequest
0 голосов
/ 29 мая 2011

Я довольно новичок в C и Objective-C, так как меня раньше обучали Python.Таким образом, в семье С есть вещи, которые поражают меня.Я просматривал веб-страницы, брал книги и просматривал форумы здесь, но некоторые вещи все еще вызывают у меня сомнения ...

  1. Я понимаю переменные и указатели в теории (один из них возвращаетзначение, а другой возвращает адрес значения в системе.) Я не понимаю, когда уместно использовать один над другим.Любой совет?

  2. Что такое свойство при объявлении класса?Кажется, что свойства и переменные класса идентичны, но я знаю, что должно быть какое-то критическое различие.

@interface testViewController : UIViewController {

    IBOutlet UILabel *label;
    IBOutlet UIImageView *uiImageView;
 }

 @property (nonatomic, retain) IBOutlet UILable *label;

 @property (nonatomic, retain) IBOutlet UIImageView *uiImageView;

 @end

Если возможно, хотя вряд ли,не могли бы вы ответить сравнением с Python?Я знаю, что Objective-C и Python - это день и ночь, но все, что вы можете придумать, было бы замечательно.

Книги, которые я получил, были от Apress: Learn C на Mac, Learn Objective-C на Mac,Приложения для iPhone и iPad для абсолютных новичков.

Я действительно ценю любую помощь!

1 Ответ

1 голос
/ 29 мая 2011
  1. Я понимаю, что переменные и указатели в теории (одна возвращает значение, а другая возвращает адрес значения в системе.) Что я не понимаю, так это когда уместно использовать одну над другой,Любой совет?

В отличие от Java, Python и .NET, где все переменные являются «указателями на объекты», которые можно передавать, в C вещи могут существовать в двух местах.

Впрограммный код (переменная появляется при нажатии на код, исчезает при возврате функции).Например:

int my_arr[3];

или в «куче», которая является памятью, а не частью программы, которая динамически запрашивается следующим образом:

int *my_arr_pointer = malloc(sizeof(int) * 3);

Второй пример близок ккак Java, Python и .NET обмениваются вещами.Однако, когда вы используете malloc () для получения памяти, вам нужно использовать free () для нее позже ... или ваша программа засасывает и тратит память компьютера.Так что используйте технику, чтобы убедиться, что вы используете постоянный объем памяти.Используйте второе, чтобы написать более гибкое приложение.C не имеет управления памятью, поэтому первый подход делает более быструю и простую в отладке программу ... которая требует копирования объектов между функциями по сравнению со вторым подходом, где проще иметь массив гибких размеров, в котором программа растет и сжимаетсяпо размеру ... но это немного сложнее, чтобы написать.Используйте то, что подходит.

3. Что такое свойство при объявлении класса?Кажется, что свойства и переменные класса идентичны, но я знаю, что должно быть какое-то критическое различие.

Свойства являются обертками для переменных класса.«Сеттер» и «геттер».Это позволяет вам:

a) использовать точку останова, чтобы узнать , где в вашем коде задает эту переменную.

b) для проверки безопасности или разрешений,или для проверки установленного значения.

c) Свойство не должно привязываться к переменной.Это может создать «иллюзию», когда данные генерируются динамически.например, свойство size может подсчитывать буквы в строке, когда вы запрашиваете его, а не сохранять его.

d) больше гибкости для изменения класса позже без изменения всего, что обращается к этому свойству.

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