의미 문제: 자산의 합성된 getter는 '소유' 객체를 반환하기 위한 코코아 명명 규칙을 따릅니다.
현재 iOS 5 SDK를 사용하여 앱을 개발 중입니다.NSString 속성을 만들고 .m 파일로 합성하려고 합니다(이 작업은 이전에도 문제없이 수행했습니다).자, 저는 이것을 우연히 발견했습니다: "의미적인 문제: 부동산의 합성된 getter는 '소유된' 물건을 돌려주는 코코아 명명 규칙을 따릅니다."
이게 제 코드입니다. .h
@interface ViewController : UIViewController {
NSString *newTitle;
}
@property (strong, nonatomic) NSString *newTitle;
.m
@synthesize newTitle;
내가 이걸 어떻게 고칠지 아는 사람 있어?감사합니다!!
사용하고 있는 컴파일러 버전은 선언된 속성의 메모리 관리 규칙, 구체적으로는 선언된 속성의 접근자에 대한 메모리 관리 규칙도 따르는 것 같습니다.
이름이 "alloc", "new", "copy" 또는 "mutableCopy"로 시작하는 메서드를 사용하여 개체를 만들 경우 개체의 소유권을 가져옵니다.
「 」라고 하는 이름의 .newTitle
를 합성하면 다음과 같은 메서드가 생성됩니다.-newTitle
따라서 경고/오류가 발생합니다. -newTitle
는 Getter의 입니다.newTitle
단, 이 "예"로 되어 있습니다.new
는 발신자가 소유한 객체를 반환합니다.겟터
이 문제는 다음 방법으로 해결할 수 있습니다.
해당 속성 이름 바꾸기:
@property (strong, nonatomic) NSString *theNewTitle;
속성 이름을 유지하고 특별한 메서드 이름 접두사 중 하나로 시작하지 않는 getter 이름을 지정합니다.
@property (strong, nonatomic, getter=theNewTitle) NSString *newTitle;
이름을 모두 되지만 getter 이름이 getter로 시작됨을.
new
, 은 , , 에 .none
메서드패밀리new
다음 중 하나:#ifndef __has_attribute #define __has_attribute(x) 0 // Compatibility with non-clang compilers #endif #if __has_attribute(objc_method_family) #define BV_OBJC_METHOD_FAMILY_NONE __attribute__((objc_method_family(none))) #else #define BV_OBJC_METHOD_FAMILY_NONE #endif @interface ViewController : UIViewController @property (strong, nonatomic) NSString *newTitle; - (NSString *)newTitle BV_OBJC_METHOD_FAMILY_NONE; @end
에서는, 「 」를 할 수 만, 「 」를 유지할 수 .
newTitle
및로서, 성성 이 as 、 고 as 、 as as as as as as as as as as as as as as as as as as as as as as라고 하는 있습니다.-newTitle
발신자가 소유한 오브젝트를 반환하지 않는 경우 코드를 읽는 다른 사람에게 혼란을 줄 수 있습니다.
참고로 Apple은 Transitioning to ARC Release Notes를 발행했습니다.이 릴리스 노트에는 다음과 같은 내용이 기재되어 있습니다.
수 .
new
★★★★★★★★★★★★★★★★★」copy
.
이들은 이미 자신의 진술이 정확하지 않다는 것을 알고 있습니다. 즉, 범인은 속성 이름이 아니라 getter 메서드 이름입니다.
2015년 1월 17일 편집:위의 옵션 3을 제안하는 Clang에 대한 최근 커밋을 방금 알게 되었습니다.objc_method_family(none)
은 나중에 될 수 있습니다Xcode에는 최종적으로 이 변경이 반영될 가능성이 있습니다.
허용되지 않는 개체 이름
- new 버튼
- copy Label(라벨)
- allocateTitle(할당제목)
허용 가능한 개체 이름
- neue 버튼
- mCopy Label
- _allocTitle
#code #자동크기 조정 #xcode-4.6.1
** 편집 **
mutable Copy도 사용할 수 없는 것 같습니다.
new로 시작하는 멤버 이름이 경고를 트리거하는 원인입니다.이름을 편집으로 변경하다제목과 경고는 사라집니다.이를 확인하는 문서를 찾을 수 없었지만 테스트를 통해 'new'로 시작하는 멤버 변수가 컴파일러를 악화시킨다는 것을 확인할 수 있었습니다.
ARC에서는 속성 이름에 "New..."를 사용할 수 없습니다.getter 이름을 바꾸면 newTitle을 사용할 수 있습니다.
@property (nonatomic, strong, getter=theNewTitle) NSString *newTitle;
인스턴스 변수를 됩니다.NewTitle
그런 다음 그 특성을 합성합니다.이전에는 인스턴스 변수와 속성을 선언해야 했습니다.이제 그만.
올바른 방법은 다음과 같습니다.
.h
@interface ViewController : UIViewController
@property (nonatomic, strong) NSString *newTitle;
.m
@synthesize newTitle = _newTitle; // Use instance variable _newTitle for storage
" " " "newTitle
합성됩니다.인스턴스 변수가 속성과 동일하지 않아야 합니다. 실수하기 쉽습니다.
예시를 참조: 속성 선언 및 접근자 합성
CoreData에서 속성(일반적으로 컴파일)에 "new..."를 사용하면 "bad access" 예외와 함께 랜덤하게 충돌합니다.
크래시 로그는 없으며 "All Exceptions Breakpoint"와 함께 표시된 행은 전혀 도움이 되지 않습니다.
이 경고가 제거된 것과 동일한 이름으로 설정기를 수동으로 작성하면 이 경고가 제거됩니다.
NS_RETURNS_NOT_RETAINED
는 명명 문제를 해결하기 위해 사용됩니다.
@property (nonatomic, copy) NSString *newTitle NS_RETURNS_NOT_RETAINED;
그 정의는 다음과 같습니다.
#define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained))
'ns_returns_not_retained' 속성은 'ns_returns_retained'의 보완입니다.기능 또는 방법이 코코아 규약을 준수하고 보관된 코코아 객체를 반환하는 것처럼 보일 수 있는 경우, 이 속성은 반환된 객체 참조가 발신자에게 반환되는 "소유" 참조로 간주되어서는 안 된다는 것을 나타내기 위해 사용될 수 있다.Foundation 프레임워크는 다음과 같은 기능상 동등한 매크로 NS_RETURNS_NOT_RETING을 정의합니다.
자산 이름 앞에 "new"를 사용할 수 없거나 사용할 수 없는 문제 외에 한 가지 더 말씀드리겠습니다.일반적으로 이름 앞에서는 "새로운"을 피하도록 하세요."New"는 시간에 따라 달라집니다.현재는 새로운 기술이지만, 잠시 후 다시 새로운 기술을 도입하고 싶을 수도 있습니다.그래서 이름에 "new"를 사용하는 것은 항상 좋지 않습니다.이렇게 생각해 보세요.프로그래밍 세계에서는 '새로운'이 항상 무언가를 창조하고 있습니다.즉, 어떤 새로운 예를 들 수 있습니다.
다른 제목을 할당하려는 경우 현재 이름을 특성 제목대체로 지정합니다.
한가지 더:setSomething 또는 getSomething과 같은 동사로 함수 및 메서드의 이름을 먼저 지정하십시오.단, 속성에서는 heightMinimum, heightMaximum 등 오브젝트의 이름을 먼저 붙이려고 합니다.-> 코드화할 때 인스펙터를 사용하면 항상 오브젝트를 찾습니다.시험해 보세요.;-)
이것을 시험해 보세요:-
@property (nonatomic,retain) NSString *newTitle;
언급URL : https://stackoverflow.com/questions/6327448/semantic-issue-propertys-synthesized-getter-follows-cocoa-naming-convention-fo
'bestsource' 카테고리의 다른 글
문자열을 날짜 시간으로 변환 (0) | 2023.04.09 |
---|---|
WPF의 목록 상자 항목을 선택할 수 없도록 설정 (0) | 2023.04.09 |
VBA(Excel) 오류의 적절한 처리 (0) | 2023.04.09 |
WPF 라운드 코너 컨테이너를 작성하려면 어떻게 해야 합니까? (0) | 2023.04.09 |
iOS info.plist 파일 내의 문자열을 현지화하려면 어떻게 해야 합니까? (0) | 2023.04.09 |