我正在观看WWDC ARC介绍视频,在看到一个Apple工程师谈到Stack示例之前,我看到过ObjC中从未见过的东西.
以下代码用于ARC的堆栈示例:
@implementation Stack
{
// instance variable declared in implementation context
NSMutableArray *_array;
}
- (id)init
{
if (self = [super init])
_array = [NSMutableArray array];
return self;
}
- (void)push:(id)x
{
[_array addObject:x];
}
- (id)pop
{
id x = [_array lastObject];
[_array removeLastObject];
return x;
}
@end
Run Code Online (Sandbox Code Playgroud)
请注意在@implementation指令之后声明的实例变量.
现在让我感到惊讶的是,实际变量实际上可以在实现文件中声明,而不是静态变量.我的问题如下:
和这个一起度过一段时间.
我有一个超级简单的Cocoa应用程序,其中包含一个WebView,一个在页面中定义的WebScripting API,以及在该API上定义的单个NSObject.当我打开调试工具(在嵌入式WebView中)时,我可以在JavaScript窗口对象上看到API,我可以看到我的"api"属性定义 - 但是当我调用API的"get"方法时,参数没有被序列化 - 当调用Obj-C方法时,参数丢失了.见下文,希望说明:

我已经通过了文档梳理,我有(显然)设置相应的方法暴露需要暴露的一切,我可以看到被调用的方法.必须有一些我不知道的愚蠢,但作为这个环境的相对新手,我没有看到它.
在此先感谢您的帮助!
做一些调试我打印出一个NSDictionary变量的描述,它给出了:
(NSDictionary *) labelAttrs = 0x00000001
Run Code Online (Sandbox Code Playgroud)
有人可以澄清为什么会这样1吗?
我理解nil或对象指针,但为什么1?
UPDATE
代码:
NSDictionary *labelAttrs = @{NSForegroundColorAttributeName:[UIColor darkGrayColor]};
Run Code Online (Sandbox Code Playgroud)
它在iOS5上运行时崩溃但不是iOS6但是这样:
似乎说你可以使用iOS5的新文字(只要你针对iOS6构建并使用Xcode> = 4.5并使用最新的LLVM进行编译 - 例如看屏幕抓取).而且,根据Apple的说法,我应该可以使用它们:https://developer.apple.com/library/ios/#releasenotes/ObjectiveC/ObjCAvailabilityIndex/index.html
以下是它在Xcode中的外观:

然后我走过去:
注意:这给了我同样的崩溃:
NSDictionary *labelAttrs = [NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], NSForegroundColorAttributeName, [UIFont fontWithName:CUSTOMFONT size:size], NSFontAttributeName, [NSNumber numberWithInt:0], NSStrokeWidthAttributeName, nil];
Run Code Online (Sandbox Code Playgroud)
删除此(以及以下2行代码)意味着应用程序运行时不会崩溃.但显然没有归因于字符串.
更新:已解决.在iOS5上无法使用归因字符串(至少对于UILabel而言):在iOS 6之前NSAttributedString是否可用?