source

"'NSString *' 유형의 매개 변수로 'constant NSString *'을(를) 전송하면 한정자가 삭제됩니다." 경고

manysource 2023. 4. 10. 22:01

"'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 * constkSomeConstString을 재할당하지 않도록 합니다.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