2011-04-07 6 views
11

가능한 중복 :
How does an underscore in front of a variable in a cocoa objective-c class work?속성 이름의 밑줄 접두사?

사람이 밑줄의 사용에 대한 설명으로 날 포인트, 나는 항상 당신이 바르 [_window release];에 액세스하는 것을 강조하기 위해 사용되는 것으로 가정했다 setter/getter 메서드 [[self window] release]; 또는 [self.window release];을 통해 iVar에 액세스하는 것이 아니라 내 이해가 올바른지 확인하고자합니다.

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UILabel *markerLabel; 

@synthesize window = _window; 
@synthesize markerLabel = _markerLabel; 
+0

내가 그걸 사용하고 있습니다. –

+0

이것은 여기이 다른 속보를 가리 키기 위해 사용됩니다. 흥미 롭습니다. http://stackoverflow.com/questions/3521254/prefixing-property-names-with-an-underscore-in-objective-c –

답변

0

귀하의 이해가 잘 들립니다.

이 규칙의 또 다른 장점은 바르가 _view 대신 view 경우

view = viewController.view ; // usually bad 

컴파일하지 않기 때문에 실수, 세터를 사용하지 않고 바르에 액세스 할 수 있다는 것입니다.

보통 저는 ivar를 선언하지 않으며 단지 @property@synthesize을 사용합니다. 명시 적 ivar 선언하지 않고, 컴파일러 (적어도 최근 하나) 자동으로 ivar (같은 이름) ​​생성합니다. 그래서 위의 코드는 문제없이 컴파일하고 setter 사용하지 않는 것에 대한 경비 역할을하지 않지만 한 줄의 코드를 없애 버릴 수 있습니다. 이것은 나쁘지는 않을 것으로 생각하고 추천하지 않습니다. p

10

ivar 이름에 밑줄을 사용하는 것은 처음에 사용 된 규칙입니다. Apple은 실제 ivar과 속성을 구별합니다. 많은 사람들이이 대회를 채택했습니다.

이 작업이 완료 이유는 바르에 새로운 값을 할당하는 대신 실제 세터에 실수를 방지하는 것입니다

myIvar = newValue; 

대신

self.myIvar = myValue; 

실수를 사용하는 경우 예를 들어, 메모리 누수가 발생할 수 있습니다. 밑줄은 실수를 저지르는 것을 방지합니다.

+2

사과? 어쨌든, Apple은이 규칙을 사용하지 않습니다. Cocoa Coding Guidelines에 언급되어 있지 않고 Apple의 코드에도 사용되지 않았습니다. 예 : http://developer.apple.com/library/mac/#samplecode/TreeView/Listings/TreeViewDemo_View_TreeView_h.html#//apple_ref/doc/ uid/DTS40010131-TreeViewDemo_View_TreeView_h-DontLinkElementID_19 밑줄을 사용하여 인스턴스 변수를 사용하려는 곳에서 속성을 잘못 사용하는 것을 방지 할 수 있습니다. – LearnCocos2D