我有点困惑,什么时候最好使用:

static NSString *AppQuitGracefullyKey = @"AppQuitGracefully";

而不是

#define AppQuitGracefullyKey    @"AppQuitGracefully"

我见过C或C++这样的问题,我觉得这里的不同之处在于,这是专门针对目标C的,利用一个对象,在像iPhone这样的设备上,可能有堆栈、代码空间或内存问题,我还没有掌握.

一种用法是:

appQuitGracefully =  [[NSUserDefaults standardUserDefaults] integerForKey: AppQuitGracefullyKey];

还是只是风格的问题?

谢谢

推荐答案

如果使用static,编译器将在二进制文件中嵌入字符串的一个副本,并只传递指向该字符串的指针,从而生成更紧凑的二进制文件.如果使用#define,则每次使用时源中都会存储一个单独的字符串副本.持续的字符串合并将处理许多DUP,但这会无缘无故地使链接器工作更困难.

Objective-c相关问答推荐

将 NSInteger 转换为 NSIndexpath

NSMutableDictionary 的深层可变副本

MKMapView 上的 UIPanGestureRecognizer?

应用程序终止时处理推送通知

当前周开始和结束日期

为什么我不应该在 init/dealloc 中使用 Objective C 2.0 访问器?

在 UITableViewCells 上显示复制弹出窗口的简单方法,如地址簿应用程序

如果用户禁用了应用程序的推送,是否可以进行静默远程通知?

不区分大小写的核心数据 CONTAINS 或 BEGINS WITH 约束

静态 NSString 使用与内联 NSString 常量

如何保存我的 iPhone 应用程序的用户首选项?

我应该在 ARC 的 init 方法中引用 self.property 吗?

如何在表格视图中的两个单元格之间留出空间?

如何在 ios 8 的 alertview 中添加文本输入?

如何在 Objective C 中将浮点数转换为 int?

滑动删除单元格导致 tableView 标题随单元格移动

在我滚动之前,数据不会加载到 UITableView 中

获取当前调度队列?

UITableView ,重新加载时滚动到底部?

字符串常量和字符串文字有什么区别?