Answers:
您应按以下方式声明常量字符串:
NSString * const kSomeConstantString = @""; // constant pointer
代替:
const NSString * kSomeConstantString = @""; // pointer to constant
// equivalent to
NSString const * kSomeConstantString = @"";
前者是指向NSString
对象的常量指针,而后者是指向常量NSString
对象的指针。
使用a NSString * const
可防止您将kSomeConstantString重新分配为指向其他NSString
对象。
该方法isEqualToString:
需要一个类型为的参数NSString *
。如果将指针传递给常量字符串(const NSString *
),则传递的内容与预期的有所不同。
此外,NSString
对象已经是不可变的,因此使它们const NSString
变得毫无意义。
const
限定适用于在它的左边期限,并将其应用到其右边的名词而已,如果有什么在其左侧(如const char *
和char const *
是非const的指针为const char,不过char *const
是一个const指针不为const char )。
只是将所有内容放在一个可以在stackoverflow的各个帖子上找到并对我有用的地方,#define不好,因为您不能从变量类型中受益,基本上编译器会在编译时替换所有出现的内容(在需要时导入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
抽出几分钟阅读此内容。对指针的好读对常量不利,反之亦然。