Я из мира C++, так что понятие присвоения this
заставляет меня вздрогнуть:Присвоение себя в Objective-C
this = new Object; // Gah!
Но в Objective-C существует аналогичное ключевое слово, self
, для которого это вполне приемлемо:
self = [super init]; // wait, what?
много кода образца Objective-C использует указанную выше строку в init
подпрограмм. Мои вопросы:
1) Почему назначение на self
имеет смысл (ответы, как «потому что язык позволяет ему» не в счет)
2) Что произойдет, если я не назначайте self
в моей init
рутине ? Я помещаю свой пример в какую-то угрозу?
3) Когда оператор, следующий if
не удается, что это значит и что мне нужно сделать, чтобы восстановить из нее:
- (id) init
{
self = [super init];
if (self)
{
self.my_foo = 42;
}
return self;
}
Почему люди так удивляются, когда разные языки имеют разные соглашения и разные правила? Если бы они этого не сделали, все было бы одинаково. –
В этом конкретном случае Objective-C тесно связан с C и C++, и понятие присвоения 'this' в этих языках имеет совершенно разные коннотации, чем назначение' self' – fbrereto
Objective-C тесно связано с C, а не с C++ , Он полностью не связан с C++ и поэтому имеет другое соглашение для работы с объектами и для инициализации объектов. –