问题标签 [cocoa]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
8478 浏览

cocoa - NSCoder vs NSDictionary,什么时候用什么?

我试图弄清楚如何决定何时使用 NSDictionary 或 NSCoder/NSCoding?

似乎对于一般属性列表和这样的 NSDictionary 是生成可在应用程序之外轻松编辑的 XML 文件的简单方法。

在处理包含数据的自定义类或可能嵌套在其中的其他自定义类时,似乎 NSCoder/NSCoding 会是更好的路线,因为它会逐步遍历所有包含的对象类并在使用归档命令时对它们进行编码。

NSDictionary 似乎需要更多的工作才能将所有属性或数据特征放到一个级别才能保存它,因为 NSCoder/NSCoding 会自动编码实现 NSCoding 接口的嵌套自定义类。

除了它是二进制数据并且在您的应用程序之外不可编辑之外,是否有真正的理由使用一个而不是另一个?沿着这些思路,是否有一个指标表明您应该在两者之间倾斜哪种方式?我错过了一些明显的东西吗?

0 投票
4 回答
3002 浏览

objective-c - performSelectorOnMainThread 实现的底层细节:

想知道是否有人知道或有指向讨论 Cocoa 的“performSelectorOnMainThread:”方法的低级实现细节的好文档的指针。

我最好的猜测,我认为可能非常接近的猜测是,它使用 mach 端口或在它们之上的抽象来提供线程内通信,将选择器信息作为 mach 消息的一部分传递。

对?错误的?谢谢!

更新 09:39AMPST

谢谢 Evan DiBiase 和 Mecki 的回答,但要澄清一下:我了解运行循环中发生的情况,但我正在寻找的答案是;“方法在哪里排队?选择器信息如何传递到队列中?” 寻找的不仅仅是 Apple 的文档信息:我读过它们

太平洋标准时间 14:21 更新

Chris Hanson 在评论中提出了一个很好的观点:我的目标不是为了在我自己的代码中利用它们而学习底层机制。相反,我只是对更好地理解向另一个线程发出信号以执行代码的过程的概念性理解感兴趣。正如我所说,我自己的研究使我相信它利用了 IPC 的 mach 消息传递在线程之间传递选择器信息,但我专门寻找关于正在发生的事情的具体信息,所以我可以确定我理解事情正确。谢谢!

2009 年 3 月 6 日更新

我在这个问题上开了一个赏金,因为我真的很想看到它得到回答,但如果你想收集,请确保你阅读了所有内容,包括所有当前提出的答案,对这些答案和我的原始问题的评论,以及我在上面发布的更新文本。我正在寻找by 等使用的机制的最低级别细节performSelectorOnMainThread:,正如我之前提到的,我怀疑它与 Mach 端口有关,但我真的很想知道。除非我能确认给出的答案是正确的,否则不会授予赏金。谢谢大家!

0 投票
7 回答
51891 浏览

objective-c - 让 NSRunLoop 等待设置标志的最佳方法?

NSRunLoop的 Apple 文档中,有示例代码演示了在等待其他东西设置标志时暂停执行。

我一直在使用它并且它可以工作,但是在调查性能问题时,我将其追踪到了这段代码。我使用几乎完全相同的一段代码(只是标志的名称不同:),如果我NSLog在设置标志后(以另一种方法)放在一行上,然后在后面的一行while()有一个看似随机的在两个日志语句之间等待几秒钟。

在速度较慢或速度较快的机器上,延迟似乎没有什么不同,但每次运行之间的延迟确实有所不同,至少为几秒,最多为 10 秒。

我已经使用以下代码解决了这个问题,但原始代码不起作用似乎并不正确。

使用此代码,设置标志时和 while 循环之后的日志语句现在始终相隔不到 0.1 秒。

有人知道为什么原始代码会表现出这种行为吗?

0 投票
2 回答
1343 浏览

python - 从 statusItem menuItem 启动的 NSWindow 不显示为活动窗口

我有一个用 PyObjC 编写的 statusItem 应用程序。statusItem 有一个 menuItem,它应该在单击时启动一个新窗口:

launchPreferences: 方法是:

Preferences 是一个 NSWindowController 类:

当我在 XCode (Build & Go) 中运行应用程序时,它工作正常。但是,当我从 XCode 外部运行构建的 .app 文件时,statusItem 和 menuItem 会按预期显示,但是当我单击 Preferences menuItem 时,窗口不会出现。我已经通过检查控制台输出验证了 launchPreferences 代码正在运行。

此外,如果我再次双击 .app 文件,则会出现该窗口,但如果我通过单击(例如)Finder 窗口来更改活动窗口,则首选项窗口会消失。在我看来,这与活动窗口有关。

更新 1 我已经尝试了 两个答案,但都不起作用。如果我添加到 launchPreferences 方法:

或者

然后我得到一个错误:

“首选项”对象没有属性

0 投票
1 回答
542 浏览

objective-c - 处理通过 NSObject 的 performSelectorOnMainThread:withObject:waitUntilDone 调用的方法期间引发的异常:

myMethod:如果通过 NSObject 调用in 时引发的异常会发生什么performSelectorOnMainThread:withObject:waitUntilDone:

特别是,我可以在这样的调用范围内捕获它们performSelectorOnMainThread吗...

我意识到如果 waitUntilDone 是 ,它的语义很奇怪NO

0 投票
33 回答
123259 浏览

iphone - 您在编写 Objective-C 和 Cocoa 时使用了哪些最佳实践?

我知道HIG(非常方便!),但是在编写 Objective-C 时,尤其是在使用 Cocoa(或 CocoaTouch)时,您使用了哪些编程实践。

0 投票
6 回答
33907 浏览

objective-c - Objective C 中的对象分配和初始化

以下两种分配和初始化对象的方法有什么区别?

大多数苹果示例使用第一种方法。为什么要分配、初始化和对象然后立即释放?

0 投票
1 回答
348 浏览

python - 对 PyObjC 应用程序进行采样/分析的最佳方法是什么?

使用 Activity Monitor/Instruments/Shark 进行采样将显示堆栈跟踪,其中包含 Python 解释器的 C 函数。查看相应的 Python 符号名称会很有帮助。是否有一些 DTrace 魔法可以做到这一点?Python 的 cProfile 模块可用于分析 Python 调用的各个子树,但对于了解整个应用程序响应用户事件的情况并没有多大用处。

0 投票
8 回答
22035 浏览

cocoa - 如何以编程方式确定正在运行的 Mac OS X 版本?

我有一个程序需要在 Tiger 上的行为与在 Leopard 上的行为略有不同。有谁知道系统调用可以让我准确确定正在运行的 Mac OS XI 版本。我找到了一些宏定义来确定构建机器的操作系统,但没有什么能很好地确定正在运行的机器的操作系统。

谢谢,乔

0 投票
5 回答
956 浏览

cocoa - 寻找 MacOS 线程网络示例代码

我的代码需要在单独的 NSThread 中运行所有网络例程。我有一个库,我通过一个回调例程进行通信:

我的回调例程必须将一些数据发布到 HTTP 服务器(NSURLConnection),等待答案(启动 NSRunLoop?),然后返回到库。
然后库处理数据。在库返回到我的线程后,我可以向处理绘图和用户输入的主线程发布通知。

是否有任何示例代码涵盖如何在 NSThread 中使用 NSURLConnection?