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

Iphone 为什么在objective-c中星号后使用下划线,iphone,objective-c,ios,pointers,Iphone,Objective C,Ios,Pointers,为什么在objective-c中星号后使用下划线 @interface TestAppDelegate : NSObject <UIApplicationDelegate> { LeftViewController *_leftViewController; } @property (nonatomic, retain) IBOutlet LeftViewController *leftViewController; @接口TestAppDelegate:NSObj

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

@interface TestAppDelegate : NSObject <UIApplicationDelegate>
{

     LeftViewController *_leftViewController;

}

@property (nonatomic, retain) IBOutlet LeftViewController *leftViewController;
@接口TestAppDelegate:NSObject
{
LeftViewController*_LeftViewController;
}
@属性(非原子,保留)IBOutlet LeftViewController*LeftViewController;

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

在一些样式指南中指出,在实例变量前面加下划线是一个好习惯。这样,如果直接处理实例变量(
\u foo
)或属性(
foo
),意图就会更清楚


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

只是为了给这个变量起另一个名字。以便在实现文件中可以使用

self.leftViewController blablabla


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

但是@property语句中提到的*leftViewControllerIt可能正是为了避免这种冲突。那么在合成时,他们为什么要写_leftViewController=leftViewController;我想你的回答暗示了
self.leftViewController
\u leftViewController
在功能上是等价的,但它们不是。前者将使用accessor/getter方法,后者将直接访问变量。这一点很重要,原因有很多,特别是内存管理
_leftViewController blablabla