"'NSString *' 유형의 매개 변수로 'constant 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
kSomeConstString을 재할당하지 않도록 합니다.NSString
물건.
방법isEqualToString:
형식상의 인수를 예상하다NSString *
. 일정한 문자열에 포인터를 넘긴 경우(const NSString *
예상과는 다른 것을 전달하고 있습니다.
게다가.NSString
오브젝트는 이미 불변하기 때문에, 그것들을 만드는 것const NSString
의미가 없어요.
stackoverflow의 다양한 포스트에 있는 모든 것을 한 곳에 모아두면 #define은 변수 유형에서 이점을 얻을 수 없기 때문에 기본적으로 컴파일러는 컴파일(필요할 때마다 Constant.h Import)할 때 모든 항목을 대체합니다.
// 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
언급URL : https://stackoverflow.com/questions/6828831/sending-const-nsstring-to-parameter-of-type-nsstring-discards-qualifier
'source' 카테고리의 다른 글
UISegmentedControl 글꼴 크기 변경 (0) | 2023.04.10 |
---|---|
NSInvocation for Dummies? (0) | 2023.04.10 |
PowerShell 문자열 보간 구문 (0) | 2023.04.10 |
쿼리에서 SQL 데이터 유형을 반환하려면 어떻게 해야 합니까? (0) | 2023.04.10 |
치명적: 미입력 서브모듈 내 (0) | 2023.04.05 |