ivars表现不尽如人意

时间:2012-03-31 12:31:42

标签: objective-c ios properties ivar

我最近阅读了一篇关于不再需要在ViewControllers上声明ivars以及属性的帖子,并且在我注意到它们时已经从我的代码中删除了重复的声明。

我注意到的一个非常令人费解的效果是,如果该属性缺少声明的ivar,则需要在self.之前加上例如:

CustomVC.h:

@interface CustomVC : UIViewController <UITableViewDelegate,UITableViewDataSource> {
...
@property (nonatomic, strong) IBOutlet UITableView *itemsTableView;

CustomVC.m:

[itemsTableView reloadData]; // cellForRowAtIndexPath not called
[self.itemsTableView reloadData]; // table view refreshed as expected

如果在没有self.的情况下访问变量时出现问题,我会发现编译时或运行时错误,但它似乎只是默默地失败,使其变得难以调试。

1 个答案:

答案 0 :(得分:1)

调用ivar(直接访问)并使用self.myIvar(这是一种存取方法 - 属性 - )是不一样的。

当您使用直接ivar访问时,它不会通知观察者,因此不会触发某些事件。最好使用self.myIvar(有些人不会同意)。

阅读非常详细且非常有趣的answer in the link

另一个好处是合成这样的属性:

@synthesize myIvar = myIvar_;

这将确保您避免错误地直接访问ivar(忘记“自我”。)