我有常量的NSString,我想喜歡叫:「送「常量的NSString *爲鍵入‘的NSString *’丟棄預選賽的參數」警告
[newString isEqualToString:CONSTANT_STRING];
任何錯誤代碼在這裏?
我得到了這樣的警告:
發送 '常量的NSString *' 到類型的參數 '的NSString *' 丟棄預選賽
應當如何進行這些聲明?
我有常量的NSString,我想喜歡叫:「送「常量的NSString *爲鍵入‘的NSString *’丟棄預選賽的參數」警告
[newString isEqualToString:CONSTANT_STRING];
任何錯誤代碼在這裏?
我得到了這樣的警告:
發送 '常量的NSString *' 到類型的參數 '的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
對象已經是不可變的,所以使它們變得沒有意義。
只是把所有發現在stackoverflow上的各種帖子上找到的一個地方,併爲我工作,#定義是壞的,因爲你不能從變量類型中受益,基本上編譯器會在編譯時替換所有出現的地方(每當你導入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
備用幾分鐘時間閱讀此內容。對常量的指針進行良好的閱讀,反之亦然。
這些字符串是如何定義的? – 2011-07-26 13:21:11