2014-03-29 6 views
0

Я делаю приложения для iPhone уже пару месяцев, и я до сих пор не понимаю, что делает сам. Я знаю его указатель на приемник, но это на самом деле ничего не говорит мне. Я думаю, что я пойму это больше, если кто-нибудь покажет мне пример, когда я буду использовать его и объясню, что произойдет, если я его не исповедую. Я использовал только метод self для вызова.как использовать сам и когда его использовать?

[self myMethod] 
// calling a method 

Третий и последний вопрос: что я могу назвать себя ожидающими свойствами и методами?

+0

Вы знакомы с другими языками ООП? – nhgrif

+0

Вы попробовали [функцию поиска] (http://stackoverflow.com/questions/14535527/use-of-self-keyword-in-objective-c)? – Till

+0

нет, но я программировал на других игровых языках, таких как lua, где self относится к текущему «объекту», как к противоположным переменным @public. Поэтому я не совсем не понимаю, что это значит. – Freddy

ответ

3

В методе класса self является указателем на класс.

В методе экземпляра self является указателем на экземпляр объекта класса.

Давайте сосредоточимся на последнем, так как это наиболее распространенное использование self.

Предположим, у нас есть класс Box. Когда мы хотим, чтобы представить окно программно, мы создаем экземпляр класса Box:

Box *myBox = [[Box alloc] init];` 

Теперь мы можем создать экземпляр столько экземпляров коробок, как хотелось бы.

Box *greenBox = [[Box alloc] init]; 
Box *redBox = [[Box alloc] init]; 
Box *blueBox = [[Box alloc] init]; 

Теперь в Box класса, мы будем иметь методы экземпляра. Это методы, которые вызываются при создании экземпляров объектов Box. Например:

[greenBox someMethod]; 
[redBox someOtherMethod]; 

Но это внешняя сторона со ссылкой на поле, которое хочет вызвать метод по определенной ссылке на ящик.

Когда объект Box необходимо вызвать метод сам по себе, он использует self в качестве ссылки на себя.

Так, скажем, когда someMethod вызывается на объект Box, как часть someMethod, объект Box нужно вызвать метод doStuff на себя.

Таким образом, в Box.m, мы могли бы иметь:

- (void)someMethod { 
    // doing actual stuff, then calling a method to do stuff 
    [self doStuff]; 
} 

Где self еще один способ в этом файле и мы называем его на объект, для которого someMethod сообщение было направлено.

Это было бы похоже на наружного звонящего, говорящего [greenBox doStuff];.

Но мы можем использовать self другими способами.

Мы можем использовать self для доступа к свойствам объекта.Например, рассмотрим это свойство в Box.h,

@property BOOL canDoStuff; 

Теперь вернемся к someMethod:

- (void)someMethod { 
    // doing actual stuff then... 
    if (self.canDoStuff) { 
     [self doStuff]; 
    } 
} 

И мы можем также использовать self в качестве аргумента метода. Например:

- (void)someMethod { 
    // doing actual stuff then... 
    if (self.canDoStuff) { 
     [BoxHelperClass doStuffWithABox:self]; 
    } 
} 
+0

Спасибо, очень приятно объяснение. Но почему вы используете (self.candostuff) вместо просто (candostuff). Я не понимаю, что он использует. – Freddy

+0

Я не понимаю вопроса. Что вы подразумеваете под «ожидать свойств»? – nhgrif

+0

извините, я его отредактировал. – Freddy

Смежные вопросы