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

1 回答 1

4

第一个仅在已实现的类内部可见和可访问。它被称为实例变量。

而该属性对其他类也是可见的。属性也由 iVar 支持。他们@synthesize在幕后做这件事。在您的情况下,可以使用属性名称(例如 )访问支持 iVar simpleViewController。但是应该通过 self 访问属性(例如self.simpleViewController),以便进行更简单的内存管理并将其与普通 iVar 区分开来。@synthesize将为 iVar 生成 getter 和 setter,并将根据属性声明(此处保留)进行内存管理。

现在你甚至不再需要了@synthesize。只需声明一个属性。编译器将使用带有前缀下划线的支持 iVar 创建属性。因此可以通过self.simpleTableViewController或 via访问它_simpleTableViewController

于 2013-06-28T06:34:07.167 回答