반응형
“ 'const NSString *'을 'NSString *'유형의 매개 변수로 보내면 한정자가 삭제됩니다. "경고
상수 NSString이 있는데 다음과 같이 호출하려고합니다.
[newString isEqualToString:CONSTANT_STRING];
여기에 잘못된 코드가 있습니까?
이 경고가 나타납니다.
'NSString *'유형의 매개 변수에 'const NSString *'을 전송하면 규정자가 삭제됩니다.
이것들은 어떻게 선언되어야합니까?
상수 문자열을 다음과 같이 선언해야합니다.
NSString * const kSomeConstantString = @""; // constant pointer
대신에:
const NSString * kSomeConstantString = @""; // pointer to constant
// equivalent to
NSString const * kSomeConstantString = @"";
전자는 NSString
객체에 대한 상수 포인터 이고 후자는 객체에 대한 포인터 NSString
입니다.
를 사용하면 NSString * const
kSomeConstantString을 다시 지정하여 다른 NSString
객체 를 가리킬 수 없습니다 .
이 메소드 isEqualToString:
는 유형의 인수를 예상합니다 NSString *
. 상수 문자열 ( const NSString *
)에 포인터를 전달하면 예상 한 것과 다른 것을 전달하는 것입니다.
게다가, NSString
객체는 이미 불변이므로 객체를 만드는 const NSString
것은 의미가 없습니다.
스택 오버 플로우에서 다양한 게시물에있는 한곳에 모든 것을 배치하고 나를 위해 일하기 만하면 #define은 변수 유형의 이점을 얻을 수 없기 때문에 좋지 않습니다. 기본적으로 컴파일러는 컴파일 할 때 모든 발생을 대체합니다 (필요할 때마다 Constants.h 가져 오기).
// Constants.h
#import <Foundation/Foundation.h>
@interface Constants : NSObject
extern NSString *APP_STATE_LOGGED_IN;
extern NSString *APP_STATE_LOGGED_OUT;
@end
// Constants.m
#import <Foundation/Foundation.h>
#import "Constants.h"
@implementation Constants
NSString *APP_STATE_LOGGED_IN = @"APP_STATE_LOGGED_IN";
NSString *APP_STATE_LOGGED_OUT = @"APP_STATE_LOGGED_OUT";
@end
이것을 읽으려면 몇 분 정도 여유를 두십시오. 상수에 대한 포인터와 그 반대의 경우를 잘 읽어보십시오.
http://c-faq.com/decl/spiral.anderson.html
반응형
'Programming' 카테고리의 다른 글
FlexBox 내부에서 텍스트를 세로로 정렬하는 방법은 무엇입니까? (0) | 2020.03.02 |
---|---|
Flask에서 쿼리 문자열을 어떻게 얻습니까? (0) | 2020.03.02 |
자바 스크립트-문자열에서 모든 쉼표를 교체합니다 (0) | 2020.03.02 |
ListBox ItemTemplate을 가져와 ListBox의 전체 너비를 가로로 늘리는 방법은 무엇입니까? (0) | 2020.03.02 |
이전 활동 모두 완료 (0) | 2020.03.02 |