Правильно ли мое понимание «я»? - PullRequest
2 голосов
/ 26 декабря 2011

Я предоставлю простой метод, а затем объясню, как я его вижу, если это неверно, пожалуйста, дайте мне знать и исправьте меня. Я чувствую, что понимаю «я», но все еще сомневаюсь в себе.

  -(NSString *)giveBack {
    NSString *string = [NSString stringWithFormat:@"Hi there!"];
    return string;
}

-(IBAction)displayIt {
    NSString *object = [self giveBack];
    [myView setText:object];
}

myView - это объект UITextView.

Теперь что касается "я" ..

Я в основном говорю в своем методе -displayIt, что я создаю объект NSString с именем 'object' и сохраняю в нем метод, который возвращает строку с надписью "Hi there" И этот метод (названный «giveBack») выполняется НА имени моего класса (как бы я ни назвал проект). Это правильно?

Ответы [ 3 ]

2 голосов
/ 26 декабря 2011

Нет, вы не создаете объект с именем object, а затем сохраняете в нем метод и т. Д. Вы создаете переменную , которая может содержать ссылку на объект ихранение в нем ссылки на объект, полученный путем вызова метода.

[Примечание: ниже предполагается, что вы используете автоматическое управление памятью (ARC или сборщик мусора), не будет упоминания о количестве ссылок,Если вы используете ручную памятку, есть еще что подумать ...]

Добавление номеров строк к вашему образцу:

1. -(NSString *)giveBack
   {
2.     NSString *string = [NSString stringWithFormat:@"Hi there!"];
3.     return string;
   }

4. -(IBAction)displayIt
   {
5.     NSString *object = [self giveBack];
6.     [myView setText:object];
   }
  1. Объявляет giveBackкак метод экземпляра класса, для вызова его необходимо вызвать в конкретном экземпляре.

  2. RHS ([NSString stringWithFormat:@"Hi there!"]) вызывает метод класса, которыйсоздает объект типа NSString и возвращает ссылку на тип NSString * на этот объект.LHS объявляет переменную (string), которая может содержать ссылку на объект NSString.Присвоение (=) сохраняет ссылку, возвращенную RHS, в переменную, объявленную LHS.

  3. Возвращает значение в string как результат метода

  4. Объявить метод экземпляра с именем displayIt

  5. RHS: вызвать метод экземпляра (giveBack) для экземпляра объекта self - self является ссылкой на текущий экземпляр объекта в методе экземпляра (в данном случае displayIt).LHS: объявить переменную object типа NSString *.Назначение: сохранить ссылку на NSString, возвращенную вызовом метода в RHS, в переменную, объявленную на LHS.

  6. Вызвать метод экземпляра setText: для экземпляра объекта, на который ссылаютсяпеременная myView передает ей ссылку на NSString, найденную в переменной object.

2 голосов
/ 26 декабря 2011

Я думаю, вы в целом правы.

Но ниже упомянуто:

И этот метод (с именем 'giveBack') выполняется ПО имени моего класса (как бы я ни назвал проект)

Я не могу понять ваш смысл.

Имя класса - это просто символ (это текст для читателей).

Методы класса Objective-C обозначены - обозначением в начале объявления метода.

Другими словами, все объявления методов начинаются с - в @implementation CLASS_NAME ... @end блок является методом экземпляра класса CLASS_NAME.

Когда мы вызываем другие методы экземпляра (внутри метода экземпляра), мы используем ключевое слово self. Поскольку все вызовы метода Objective C должны обозначать целевой объект, и в этом случае мы вызываем себя (сам текущий экземпляр CLASS_NAME). Поэтому мы используем ключевое слово self.

Извините за мои запутанные слова .. Труднее объяснить, я подумал: - (

1 голос
/ 26 декабря 2011

вы сохраняете строку, возвращаемую 'giveBack', а не сам метод.метод является частью класса.«self» - это экземпляр объекта, для которого вы вызываете «giveBack» (и «displayIt»)

...