相关疑难解决方法(0)

在ObjC实现文件中声明的实例变量

我正在观看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指令之后声明的实例变量.

现在让我感到惊讶的是,实际变量实际上可以在实现文件中声明,而不是静态变量.我的问题如下:

  • 这是SDK for iOS 5中引入的一些新构造还是已经可以使用很长时间了?
  • 如果不在对象外部访问实例变量,那么在实现中声明实例变量是不错的做法?它似乎比使用@private指令更清洁.

objective-c automatic-ref-counting

47
推荐指数
2
解决办法
2万
查看次数

通过控制台从JavaScript调用Obj-C代码:参数被删除?

和这个一起度过一段时间.

我有一个超级简单的Cocoa应用程序,其中包含一个WebView,一个在页面中定义的WebScripting API,以及在该API上定义的单个NSObject.当我打开调试工具(在嵌入式WebView中)时,我可以在JavaScript窗口对象上看到API,我可以看到我的"api"属性定义 - 但是当我调用API的"get"方法时,参数没有被序列化 - 当调用Obj-C方法时,参数丢失了.见下文,希望说明:

在此输入图像描述

我已经通过了文档梳理,我有(显然)设置相应的方法暴露需要暴露的一切,我可以看到被调用的方法.必须有一些我不知道的愚蠢,但作为这个环境的相对新手,我没有看到它.

在此先感谢您的帮助!

macos cocoa webkit objective-c

9
推荐指数
1
解决办法
376
查看次数

(NSDictionary*)labelAttrs = 0x00000001

做一些调试我打印出一个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但是这样:

新对象文字是否向后兼容iOS 5?

似乎说你可以使用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是否可用?

objective-c ios

5
推荐指数
1
解决办法
352
查看次数

标签 统计

objective-c ×3

automatic-ref-counting ×1

cocoa ×1

ios ×1

macos ×1

webkit ×1