ObjC: разница между self.obj и obj - PullRequest
1 голос
/ 13 марта 2011

В чем разница между self.obj и obj в задаче C?

Я спрашиваю это, потому что когда я пишу [view method], это нормально

но при попытке [self.view method] это бесконечный цикл

На самом деле код следующий:

//---create a UIView object--- 
UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame]; 
view.backgroundColor = [UIColor lightGrayColor]; 
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[view addSubview:button]; 
self.view = view;

Проблема в том, что [self.view addSubview:button] дает бесконечный цикл.

Ответы [ 2 ]

3 голосов
/ 13 марта 2011

Использование obj - это то, на что это похоже: прямой доступ к переменной.

Однако self.obj - это , а не , как это выглядит. Вместо этого это контекстно-зависимый синтаксический сахар для вызова метода доступа. По соглашению, метод установки будет setObj:, а метод получения obj, хотя это можно переопределить. Поэтому обычно self.obj эквивалентен либо [self obj], либо [self setObj:x] в зависимости от того, читаете ли вы значение или присваиваете ему значение.

В вашем примере, когда вы ставите [self.view method], вы действительно делаете [[self view] method]. Не зная больше о контексте, в котором вы используете это, трудно сказать, почему он дает вам бесконечный цикл, хотя один очевидный случай, который бы это сделал, это если бы вы делали этот вызов внутри метода доступа метод для view.

2 голосов
/ 13 марта 2011

Когда вы используете '.' Вы получаете доступ к собственности. И когда вы набираете [view method], вы получаете доступ к переменной с именем view. Смотрите мой ответ на этот вопрос.

например:

-(void) doSmth {
    UIView* view = [[UIView alloc] init];
    [view method];      //sends message 'method' to view variable declared in this function 
    [self.view method]; //sends message to instance variable of self (accessing it via generated accessor)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...