问题标签 [cocoa-design-patterns]

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 投票
1 回答
463 浏览

cocoa - 可可绘图应用程序的建议

我是 Cocoa 的新手,正在向有经验的 Cocoa 开发者寻求一些关于应用程序的建议。 

我正在构建一个基本的 OmniGraffle 风格的应用程序,其中对象被绘制/拖动到画布上。对象在画布上后,可以选择它们以修改其属性(填充颜色、笔触颜色/宽度等)、调整大小、移动到新位置等。

为了热身,我编写了一个基本的绘图应用程序,它创建由鼠标在 custom 上绘制的对象(圆形、矩形等)NSView,将对象添加到NSArray集合中,并将集合的内容呈现到视图中. 我可以继续这样做,但我将不得不添加对检测对象选择、解析 z 索引、焦点突出显示、拖动手柄等所有相关渲染的支持。此外,在每个循环中渲染每个对象似乎非常浪费。

似乎更好的方法是将轻量级视图对象拖放到能够检测自身鼠标事件、绘制自身及其焦点环等的画布上。然而,虽然NSView看起来像是具有这些属性的对象,但我在网络上看到很多关于它是一个有很多包袱的重量级组件的讨论。我偶然发现了NSCells 并阅读了它们,但我不确定它们是否是正确的选择。

有什么建议么?如果您能将我推向正确的方向,我将不胜感激。

0 投票
1 回答
1364 浏览

ios - 一个类什么时候会有多个指定的初始化器?

阅读 Apple关于框架开发人员的技巧和技术的文档,我发现了关于指定初始化程序的声明:

指定初始化程序是调用 init超类方法的类的 init 方法。(其他初始化器调用init 类定义的方法。)每个公共类都应该有一个或多个指定的初始化器。

(强调补充。)

根据我的理解——事实上,“指定”这个词的用法——一个类应该只有一个指定的初始化器。但是根据文档,可以接受多个指定的初始化程序。

假设您有两个(或更多)指定初始化器,它们的作用是调用超类的指定初始化器以保证正确的对象初始化。但是如果两个指定初始化器都调用同一个超类的指定初始化器,那么为什么一开始就需要多个呢?不应该重构类以将所有其他init方法集中到单个指定的初始化程序吗?

我只是有点困惑,什么用例或设计模式需要多个指定的初始值设定项?

0 投票
3 回答
1057 浏览

objective-c - NSCoder 和/或 NSKeyedUnarchiver 如何处理同一对象的多个解码?

我想知道NSCoder下次解码时如何处理由多个对象共享和编码的对象。它会复制该对象的两个副本,还是将一个对象解码并在解码它的所有其他对象之间共享?

我在下面提供了一个类似这种情况的小例子。

例子:

  1. 应用程序启动
  2. 对象 A 和对象 B 将对象 C 设置为它们的委托
  3. 应用程序收到终止通知。
  4. 对象 A 和对象 B对它们自己和它们的所有对象(包括它们的委托)进行编码
  5. 应用程序关闭并重新启动
  6. 对象 A 和对象 B解码自己和它们的所有对象(包括它们的委托)

在第 6 步之后,对象 A 和对象 B 会共享相同的解码对象,还是它们各自拥有自己的副本?

0 投票
1 回答
549 浏览

objective-c - 将 NSObject 添加到 MainMenu.xib 是否会创建单例对象?

假设我有一个 NSObject AppController:NSObject。使用 IB,我将 NSObject 控件拖入 MainMenu.xib 并将类指向 AppController。由于 MainMenu.xib 被加载一次,并且 MainMenu.xib 中的对象在应用程序的整个生命周期中都在内存中,它是否使 AppController 对象成为单例?

然后我可以将一个 IBOutlet 拖到 AppDelegate 来访问这个单例对象。这看起来是一种快速的方法。这是一个好的做法还是应该气馁?

我认为的标准方法是在类中添加一个静态 AppController *sharedInstance 并使用 +(AppController *)sharedAppController 进行访问。

0 投票
1 回答
152 浏览

macos - 导入数据的核心数据最佳实践

我有一个使用 CoreData 进行存储的应用程序(iPad 和 Mac Lion)。该应用程序从多个硬件设备导入数据,将数据解码为多个离散事件,并将事件列表呈现给用户,然后用户可以选择保存哪些事件。

目前,我为每个事件创建一个非 CoreData 对象,然后将用户选择的对象转换为 CoreData 实体以保存在存储中。这意味着我基本上每个对象都有两个类;一个托管 CoreData 对象,以及另一个在用户选择它之前表示事件的非托管对象。

我怀疑必须有一种更好、更低的代码开销(阅读:更易于管理)的方法来做到这一点:

  • 我可以创建核心数据实体而不将它们保存到商店中,然后只保存用户选择的那些吗?
  • 还是有其他方法可以使用 CoreData 来构建它?
0 投票
1 回答
139 浏览

objective-c - 通过它连接到的视图从自定义手势访问视图控制器是否很好?

我正在尝试用手势操作 3D 对象。为了完成我的任务,我需要实现一些自定义 GesturesRecognizer。

我正在继承 UIGestureRecognizer来检测手势。

我需要做的是访问在屏幕上绘制的 3D 对象的顶点。我的 ViewController 类中有这些数据。说,我想知道 r 正在触摸的方面的法线。

虽然,我可以尝试从将通过某种方式连接到自定义手势的 View 访问 ViewController,但我不认为这是访问对象的好方法。

我的问题是……

是否可以在视图控制器中创建一些结构的实例变量来保存 3D 对象的顶点/法线信息。

如果不是,那么存储此类信息以渲染对象的最佳方式是什么。

我想在这里问的另一件事是

通过它连接到的视图从自定义手势访问视图控制器是一种好方法吗?

请建议我处理我的问题的最佳方法。

0 投票
1 回答
187 浏览

iphone - 基于 JSON 对象的数据结构

我刚刚有一个基于 MVC 模型的问题,我想将其用于 JSON 对象。我正在解析来自 Web 服务的一些值,此时,出于安全目的,我不想在任何给定点将任何凭据存储在设备上。拥有许多可以访问与此对象有关的信息的视图控制器,与在每个视图控制器处重新创建对象相比,将此对象作为可以全局访问且只有一个实例的“单例对象”是一种好方法。另外,假设我想创建某种关于 json 对象的模型,将对象从 json 绑定到这种“模型”的更好方法是什么?有没有通用的方法,或者只是“DIY”方法?

谢谢。

0 投票
3 回答
2200 浏览

c++ - C++ 中的通知中心

在使用 iOS 和 Mac 目标 C 框架编程一段时间后,我开始喜欢由 NSNotificationCenter 和 NSNotification 类实现的通用通知模式。回到 C++,它一直是我在大多数事情上的首选语言,我发现自己在尝试复制这种模式,并相信确实应该已经存在类似 C++ 类的通用实现,为它提供支持。

看起来这种模式在 C++ 中比 Objective C 更难实现,因为后者更具动态性,但似乎远非不可能。我浏览了 boost 库,因为它们通常很棒,很遗憾没有在那里找到我的运气。尽管 boost::bind、boost::lamda、boost::function 似乎完成了大部分工作。我错过了什么明显的东西吗?是否已经存在任何可以让我轻松复制 NSNotification/NSNotificationCenter 行为的东西?

0 投票
1 回答
65 浏览

macos - 我的新控制器的超类应该是什么?

我是一个内部程序的开发人员,用于对充液外壳的谐波和其他特性进行建模。现在,整个程序假设在计算中一次只使用一组物理属性(温度、压力等)。我已经将所有计算分解为一个球体模型。我有一个拥有球体的控制器。当用户更改物理属性时,控制器让球体重新计算所有内容并更新所有显示球体计算结果的窗口。

现在有人要求我制作一张表格,显示特定谐波在一定温度和压力范围内的频率。我认为这将需要一个具有自己球体模型的新控制器,因为它需要独立于所有其他窗口。

这是我的问题:我的新控制器应该是 NSWindowController 子类,还是应该是 NSObject 子类,其属性是 NSWindow,其文本字段绑定到控制器中的值(或完全不同的东西)?我是公司中唯一的开发人员,我在过去四年编写这个程序时自学了 Cocoa,所以我不确定我是否一直遵循最佳实践。由于我即将推出一项新的重要功能,我想确保我做对了。

不确定这是否重要,但该解决方案必须在 OS X 10.5 下运行,因为我们组织中仍有一些 G5 机器。

0 投票
1 回答
837 浏览

ios - 如何在mac应用程序中使用标签栏

我正在尝试开发 mac 应用程序(可可应用程序)。我已成功在 iphone 应用程序中使用标签栏。但是在开发mac应用程序时,如何使用tabbar?

当我们为 iphone 应用程序使用标签栏时,我想为 Mac 应用程序(可可应用程序)实现相同的功能。

任何想法?它怎么可能?