2013-06-28 3 views
0

может быть, это маленький детский вопрос, но я действительно хочу знать детали. Я только что просмотрел этот код:В чем разница между следующим состоянием?

@implementation SimpleMainViewController 
{ 
    SimpleTableViewController *simpleTableViewController; 
    AboutViewController *aboutViewController; 
} 

В чем разница между этим и следующим?

@interface SimpleMainViewController : UIViewController 
@property(nonatomic,retain) SimpleTableViewController *simpleTableViewController; 
@property(nonatomic,retain) AboutViewController *aboutViewController; 

@implementation SimpleMainViewController 
@synthesize simpleTableViewController; 
@synthesize aboutViewController; 

спасибо в вперед.

ответ

4

Первый из них является видимым и доступным только внутри внедренного класса. Он называется переменной экземпляра.

Принимая во внимание, что собственность видна и для других классов. Свойство также поддерживается iVar. @synthesize делает это за кулисами. В вашем случае доступ к iVar для поддержки может быть доступен с именем свойства (например, simpleViewController). Но нужно получить доступ к свойству через self (например, self.simpleViewController) для более простого управления памятью и отличать его от обычного iVar. @synthesize будет генерировать гейтер и сеттеры в iVar и будет управлять памятью в соответствии с объявлением свойства (здесь сохраняется).

В настоящее время вам больше не нужен @synthesize. Просто объявите свойство. Компилятор создаст свойство с поддержкой iVar с префиксом подчеркивания. Таким образом, можно было получить доступ к нему либо через self.simpleTableViewController, либо через _simpleTableViewController.

+0

Спасибо за внимание! И у них нет других различий? – Calios

+0

+1, очень подробный ответ :) – mAc

+0

Они разные! Добавлено больше информации для ответа. – Pfitz