그게 전부입니다. 왜 누군가는 (적어도 공개 API로서) 그런 방법을 원했을까요? 거기에 실용적인 용도가 있습니까?NSObject 준수 클래스에서 -self 메서드의 용도는 무엇입니까?
답변
self
방법은 키 - 값 코딩 (KVC)에 유용합니다.
KVC를 사용하면 사전과 비슷한 개체를 처리 할 수 있습니다. [view valueForKey:@"superview"]
과 같이 속성 이름이 포함 된 문자열을 사용하여 객체의 속성에 액세스 할 수 있습니다. 키 경로가 포함 된 문자열 (예 : [view valueForKeyPath:@"superview.superview.center"]
)을 사용하여 속성 체인을 연결합니다.
NSObject
에는 self
방법이 있으므로 self
을 키 또는 키 경로로 사용할 수 있습니다 ([view valueForKey:@"self"]
). 따라서 프로그래밍 방식으로 키 경로를 구성하거나 파일에서 키 경로를 읽는 경우 "self"
을 키로 사용하면 특별한 경우 작성을 피할 수 있습니다.
당신은 또한이 같은 조건에서 self
를 사용할 수 있습니다
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self beginswith \"foo\""];
NSArray *filteredArray = [arrayOfStrings filteredArrayWithPredicate:predicate];
내가 NSPredicate
실제로이 경우에 (아마도 KVC 통해) self
방법을 사용하는지 여부를 알 수 없습니다. 확실히 가능합니다.
"SELF"는 "nil", "NULL"및 기타 묶음과 같은 NSPredicates의 특수 상수로 문서화됩니다. 그것은 실제 "self"메쏘드에 매핑 될 수 있습니다. 그러나 저에게 문서화는 그것이 특별 함을 암시합니다. –
ObjC 런타임과 관련이 있다고 생각합니다.
objc_msgSend(autoreleasePool, sel_registerName("drain"));
BOOL AppDel_didFinishLaunching(struct AppDel *self, SEL _cmd, void *application, void *options)
첫 번째 인수는 자체입니다. 나는 그것이 그것과 관련이 있다고 생각한다. 모든 정직하지만 결국은 다음과 같이 끝날 것입니다.
id self(struct id *self, SEL _cmd) {
return self;
}
....이 응답을 쓰기 시작하기 전에 더 많은 의미가 있습니다.
"자체"가 원래 추가 된 이유는 확실하지 않지만 개체에 대한 내부 포인터를 보호하는 데 도움이되는 한 가지 이유가 있습니다. Apple의 공식 권장 사항은 내부 포인터를 사용한 후에 [foo self] 호출을 삽입하는 것입니다. 메소드 호출은 기능적으로 아무 것도하지 않지만 컴파일러가 그 전까지 foo를 유지하도록 보장합니다.
- 1. NSInvocation 클래스에서 setSelector 메서드의 용도는 무엇입니까?
- 2. SPHttpUtility.NoEncode 메서드의 용도는 무엇입니까?
- 3. 메서드의 기본값으로 self. * 사용
- 4. presentModalViewController가 NSObject 클래스에서 응답하지 않습니다.
- 5. NSObject 클래스에서 뷰 푸시하기
- 6. C++ 클래스에서 NSObject 상속
- 7. 기본 클래스에서 템플릿 방법의 용도는 무엇입니까?
- 8. XMLStreamReader 클래스의 getEventType() 메서드의 용도는 무엇입니까?
- 9. Silverlight SDK 소스 코드에서이 메서드의 용도는 무엇입니까?
- 10. NSObject 클래스에서 ViewController 메서드 호출
- 11. 클래스를 기존 메서드의 범주로 프로토콜 준수.
- 12. NSObject 클래스에서 UIViewController를 표시하는 방법은 무엇입니까?
- 13. NSObject 클래스에서 UIviewController를 어떻게 변경합니까?
- 14. 포틀릿 클래스에서 ResourceURL을 만드는 용도는 무엇입니까?
- 15. 컬렉션을 포함하는 중첩 클래스에 대한 NSObject 설명 메서드의 올바른 구현
- 16. IOS5 : NSObject 클래스에서 이메일을 호출하는 방법
- 17. NSObject 클래스에서 viewWillAppear 해당 기능이 있습니까?
- 18. setRequestProperty 메서드의 "If-Modified-Since"매개 변수의 용도는 무엇입니까?
- 19. System.Internal (x64의 .net 4.0)에서 _HACK 메서드의 용도는 무엇입니까
- 20. NSObject 속성에서 커스텀 NSObject 읽기하기
- 21. Javascript의 클래스에서 "var self = this"가 필요한 이유는 무엇입니까?
- 22. NSObject NSObject와 NSProxy에서 모두 alloc이 선언되었지만 retain이 NSObject 프로토콜에 있습니다.
- 23. Java HashMap 구현은 Entry 클래스에서 '다음'멤버를가집니다. 그것의 용도는 무엇입니까
- 24. Objective-C - NSObject 하위 클래스에서 UIViewController로 데이터 보내기
- 25. .net에서 PerformanceCounter 클래스의 용도는 무엇입니까?
- 26. NSObject isEqual : 및 hash default 함수는 무엇입니까?
- 27. PyArg_ParseTuple의 올바른 용도는 무엇입니까
- 28. NSObject 기본 생성자
- 29. 슈퍼는 항상 Objective-C에서 NSobject 클래스에 도달합니까?
- 30. NSObject 및 NSArray 클래스에서 오류를 표시하는 기초 프레임 워크
글쎄, 왜 ...? –
질문은 "왜 누구가 원하는가 ..."또는 "목적은 무엇입니까 ..."가 아니라 "왜 그곳에 있습니까?"였습니다. – Matoe
이것은 유효한 질문 인 것 같습니다. 왜 downvotes? –