最近在看Effective oc 2.0這本書。對于預處理命令有一個建議:使用static const代替#define。
然后今天遇到一個問題:
static const NSString *appSchemeAlipay = @"iOShuixiangni";
NSString *str = appSchemeAlipay;
這樣使用是有問題的,提示警告就是標題。
而書上使用的是NSTimeInterval這個變量。
這個問題的解釋就是:把const類型的字符串作為參數(shù)傳到非const類型參數(shù)的方法中去了。
在stackoverflow的處理是:
You should declare your constant string as follows:
NSString * const kSomeConstantString = @""; // constant pointer
instead of:
const NSString * kSomeConstantString = @""; // pointer to constant
// equivalent to
NSString const * kSomeConstantString = @"";
前者是指向NSString對象的常量指針,后者是指向常量NSString對象的指針。
使用 NSString * const防止您重新分配kSomeConstantString以指向不同的NSString對象。
賦值需要一個NSString *類型的參數(shù)。如果你傳遞一個指向常量字符串(const NSString *)的指針,你傳遞的東西不同于預期。
最后處理結(jié)果:
static NSString *const appSchemeAlipay = @"iOShuixiangni";