2012-04-09 6 views
1

Я новичок в объективе c. Я понимаю, что -init() является instance method и возвращает объект , например. myObj=[myObj init]; вернет объект myObj.Objective-c Супер инициализирует метод класса или метод экземпляра?

Однако, если self =[super init]; обычно super refer to parent класс, например. NSObject, который является class, not instance.

Так, Is -init() instance method or class method for super init?

благодаря

ответ

3

init - метод экземпляра. Тот факт, что вы назовете это на super, не меняет его.

Имейте в виду, что super не представляет класс вашего объекта, но ваш объект рассматривается как экземпляр его родительского класса в иерархии классов.

И вы никогда не звоните myObj=[myObj init]; - вы звоните myObj = [[MyObj alloc] init]. Обратите внимание на разницу между myObj (переменная) и MyObj (класс, для которого эта переменная является экземпляром).

+0

Итак, что такое объект экземпляра родительского класса, то есть в классе NSObject? Обычно нет родительского класса. – user1232250

+0

Это концепция объектно-ориентированного программирования. Когда вы объявляете класс MyObj как класс потомков NSObject, это означает, что каждый раз, когда вы создаете экземпляр «MyObj», он также * является экземпляром самого «NSObject». Скажем, наследование похоже на генетику: мужчины - это «подклассы» людей, которые являются подклассами приматов, которые являются подклассами млекопитающих, которые являются подклассом животных. Просто потому, что вы «мужчина-мужчина», значит, вы также «человек», «примат», «млекопитающее» и «животное». – Cyrille

+0

Я понимаю сейчас, спасибо! – user1232250

1

Вообще init используется после alloc таким образом:

MyObject* obj = [[MyObject alloc] init]; 

и alloc создать экземпляр объекта, так init является методом экземпляра, и когда вы переопределить его, это хорошая привычка всегда вызывать родительский класс init.

Постарайтесь прочитать это article.

1

Super ссылается на методы родительского класса в текущем объекте. Вызов super init вызовет метод init на текущий объект (self), но будет использовать реализацию суперкласса. Таким образом, no - init не является статическим методом (это было бы видно из-за + перед методом init). вы можете позвонить super whatMethodYouWantFromSuperclass, хотя он не является статичным. Статические методы не вызываются на объект (self), а на класс ([NSObject yourStaticMethod]).

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