【问题标题】:why using underscore after asterisk in objective-c为什么在objective-c中的星号后使用下划线
【发布时间】:2011-12-02 10:07:29
【问题描述】:

为什么在objective-c中星号后使用下划线

@interface TestAppDelegate : NSObject <UIApplicationDelegate>
{

     LeftViewController *_leftViewController;

}

@property (nonatomic, retain) IBOutlet LeftViewController *leftViewController;

【问题讨论】:

标签: iphone objective-c ios pointers


【解决方案1】:

在一些风格指南中指出,在实例变量前加下划线是一个好习惯。这样,如果直接处理实例变量 (_foo) 或属性 (foo),它的意图就会更加清晰。

(有时人们忘记在前面写self.

【讨论】:

  • 然后在综合的时候为什么要写.. _leftViewController=leftViewController;
【解决方案2】:

它是变量名的一部分。通常用于避免碰撞。

【讨论】:

  • 但@property 声明它提到了 *leftViewController
  • 可能正是为了避免这种碰撞。
【解决方案3】:

只是为该变量提供另一个名称。这样在实现文件中就可以使用

self.leftViewController blablabla

_leftViewController blablabla

但是,TBH,我从来没有两次声明这些变量。如果它是一个属性 - 让它成为一个属性并且不要在 @interface 部分声明它。但这只是我的看法

【讨论】:

  • 我认为您的回答暗示 self.leftViewController_leftViewController 在功能上是等效的,但事实并非如此。前者将使用 accessor/getter 方法,后者将直接访问变量。这很重要,原因有很多,尤其是内存管理。
猜你喜欢
  • 2011-08-28
  • 2017-10-16
  • 2010-10-09
  • 2012-09-29
  • 2014-05-19
  • 2011-08-03
  • 2017-08-12
  • 1970-01-01
  • 2011-10-30
相关资源
最近更新 更多