2011-07-26 55 views

回答

843

你應該聲明的常量字符串如下:

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對象已經是不可變的,所以使它們變得沒有意義。

+3

你說前者是指向NSString對象的常量指針。所以這意味着指針是不變的。因此我不能將它重新分配給另一個NSString。 –

+1

是的,就是這樣:) – albertamg

+4

@albertamg:天才! – ma11hew28

6

只是把所有發現在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 
相關問題