저는 (특히 iPhone에서) iOS 개발에 익숙하지 않은 숙련 된 개발자입니다. 내가 일하고있는 프로젝트는 ARC (Automatic Reference Counting)를 사용하고 있습니다.iOS 용 objective-c/cocoa에는 어떤 메소드 패밀리가 있습니까?
나는 ARC에 대한 조사를하고 있었고이 문서를 보았습니다 : http://clang.llvm.org/docs/AutomaticReferenceCounting.html 및 "Retained return values"라는 제목의 섹션에서 속성을 사용하여 발신자가 +1의 소유권을 얻으려는 것을 나타낼 수 있음을 나타냅니다 카운트 유지. 또한 ARC가 특정 메소드 패밀리 (구체적으로 : alloc, copy, init, mutableCopy 및 new)에 있음을 감지하면 ARC가 메소드에 속성을 자동으로 추가 함을 설명합니다.
추가 읽기에서부터 메서드 패밀리는 단순히 메서드 명명 규칙입니다. 나의 이해는 메소드 이름이 메소드 패밀리로 시작하면 그 메소드 패밀리에있다. 따라서 예를 들어
+(id) init
+(id) initWithName:(NSString*)name
은 init 메소드 패밀리의 일부입니다.
내 질문에 : iOS 개발을 위해 정의 된 Method Families 목록이 있습니까? 그렇다면 어디에서 찾을 수 있습니까?
3.2.2 : 아래
제가 위에서 언급 한 부분 llvm.org 인 보존 리턴 값 상태 :가 표시 될 수있는 보존 가능한 오브젝트 포인터 타입을 반환하는 함수 또는 방법 보유자는 발신자가 +1 보유 수의 소유권을 가져야 함을 나타냅니다. 이 때문에 같은 기능 또는 방법 선언에 ns_returns_retained 속성을 추가함으로써 행해진 다 :
foo를 ID (공극) __attribute ((ns_returns_retained)); - (id) foo __attribute ((ns_returns_retained)); 이 특성은 함수 또는 메서드 형식의 일부입니다.
이러한 함수 또는 메서드에서 복귀 할 때 ARC는 모든 로컬 범위를 떠나기 전에 return 문을 평가할 때 값을 유지합니다.
이러한 함수 또는 메서드에서 반환 된 결과를 받으면 ARC 은 로컬 값에 대한 일반적인 최적화가 적용되는 경우 내에 포함 된 전체 식의 끝에서 값을 해제합니다.
이론적 설명 : 이는 호 출자 에서 발신자에게 소유권을 직접 전송하는 것을 공식화합니다. 이 모델에서 가장 공통적 인 시나리오는 init, alloc, new 및 copy 메소드에서 반환 된 이지만 프레임 워크에 다른 사례가 있습니다. 최적화 후 일반적으로 추가 보유 및 릴리스가 필요하지 않습니다.
ALLOC를, 복사, 초기화, mutableCopy의 메소드, 새로운 가족이 암시 속성을 표시됩니다 ((ns_returns_retained)). 이것은 속성 ((ns_returns_not_retained))을 명시 적으로 표시하여 일 수 있습니다.
Objective-C 메시지 ()가 정적으로 해석을 보내는 메소드가 그 결과에 대해 보유 의미론이 다른 경우 이 동적으로 해석되는 방법에서 정의되지 않은 동작입니다. 호출 된 블록 또는 함수의 구현에서 결과에 대한 보유 의미가 인 정적 유형을 통해 블록 또는 함수 호출이 수행되는 경우 정의되지 않은 동작입니다.
근거 : 결과에 따라 불일치가 발생하면 방향에 따라 초과 보유 또는 초과 출시가 발생합니다. 다시 말하지만, 함수 호출에 대한 규칙은 실제로 호환되지 않는 함수 유형을 통해 함수를 호출하는 것에 대한 기존 C/C++ 규칙의 응용 프로그램에 불과합니다.
이러한 명명 규칙 모음은 iOS가 아니라 Objective-C ARC (특히 iOS 및 OS X는 현재 알고있는 유일한 사용자)입니다. – bshirley