问题标签 [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 投票
2 回答
7184 浏览

objective-c - performSelector 方法有什么作用?

做什么performSelectorNSThread创建新方法和方法有什么区别performSelector

它是如何工作的,我们应该在哪里使用它?

0 投票
2 回答
2605 浏览

iphone - 将 10 MB JSON 响应转换为 NSDictionary 的最有效方法是什么?

我们的应用程序必须以最少的远程 http 请求显示大量数据,因此我们在后端添加了一个端点,该端点以单个 json 响应的形式提供所有必要的数据。这会产生约 1.5MB(压缩)或大约 8MB 的未压缩 json 格式文本。

问题不大,它会在 10 到 30 秒内下载完毕,我们使用 ASIHTTPRequest 将整个响应写入磁盘。

现在是有趣的部分——在将未压缩的文件读入内存映射字符串后,我们使用 stig 的json-framework将其转换为 NSDictionary。这对于我们的应用程序的其余部分和我们其他 API 端点的典型 2 KB json 响应非常有效。但是,反序列化这 8 MB 的数据需要几秒钟(模拟器)到几分钟(3G 和第二代 iPod Touch)。

我正在研究读取所有这些数据的最佳方法。

我很想使用直接从后端提供的二进制 plist,但是我们使用的是 Java,我还没有找到适合我们要求的合适库,而且在如此紧迫的期限内,编写我们自己的可能不是最好的主意。

如果它有任何帮助,我们正在解析的 json 字符串主要是 X 项的数组,如下所示:

将这个 8 MB json 格式的字符串读入内存中的 NSDictionary 的最有效方法是什么?

0 投票
2 回答
649 浏览

ios - 代表声明困境

我很困惑 - 我不明白代表的用途是什么?

默认创建的 Application Delegate 是可以理解的,但在某些情况下我看到过这样的事情:

<UIScrollViewDelegate>为了什么?

它是如何工作的,为什么要使用它?

0 投票
3 回答
2086 浏览

objective-c - 让 Objective-C 类看起来很漂亮

我想请教大家对 Objective C 中的代码异味的看法,特别是 Cocoa Touch。我正在开发一款相当复杂的游戏,并且即将开始 Great December Refactoring。

我的很多类,尤其是模型,都充满了处理内部业务逻辑的方法;我将把它们隐藏在一个私有类别中,在我与大量头文件的战争中。那些私有类别包含大量声明,这让我感到不安……几乎就像 Objective-C 让我对所有这些方法感到内疚一样。

我重构得越多(一件好事!),我就越需要维护所有这些重复(不太好)。就是感觉不对。

在像 Ruby 这样的语言中,社区非常强调非常简短、清晰、漂亮的方法。我的问题是,对于 Objective C(特别是 Cocoa Touch),你的方法有多长,你的控制器有多大,以及每个类有多少方法在你的项目中变得很典型?在 Objective C 中是否有任何由短方法组成的类的特别好、漂亮的例子,或者这根本不是语言文化的重要组成部分?

披露:我目前正在阅读“The Little Schemer”,这应该可以解释我的悲伤,回复:目标 C。

0 投票
1 回答
1182 浏览

java - Java 命令模式与 iPhone 委托模式

嗨,我是一名 java 开发人员,这些天我也开始从事 iphone 开发工作。我想知道 Java 的命令模式与 iphone 中的委托模式有些相似,反之亦然,因为在两者中都有其他人在为受让人工作。有人可以启发我吗?

0 投票
1 回答
202 浏览

cocoa - Cocoa 中的 KVC 如何检查实例变量是否可访问?

最近我在读“可可设计模式”。在谈到KVC时,它说“KVC首先检查名为-< key >或-get< Key >的访问器是否存在,如果不存在,它将尝试名为< key >或_< key >的实例变量”。obj-c 运行时可以检查实例变量是否存在吗?我认为它只能在编译时完成......

任何答案表示赞赏^_^

0 投票
3 回答
259 浏览

objective-c - 处理第三方 API 时正确的系统设计是什么?

Joubert 的这篇博文让我大开眼界。我处理过很多 Java 和其他语言的设计模式。但是Objective-C 是一种相当独特的语言。

假设在一个项目中我们使用第三方 API,比如 Dropbox 或 Facebook。到目前为止,我一直在做的是将与第三方 API 相关的所有内容组合到一个单例类中。所以我可以从我的视图控制器中的任何地方访问这个类。我可以去例如:[[DropboxModel sharedInstance] uploadFile:aFile]

然而,正如博客文章指出的那样,这效率不高,并导致意大利面条式代码和糟糕的单元测试。那么设计系统以使其模块化且易于使用的最佳方式是什么?

0 投票
1 回答
5200 浏览

iphone - 如何检测iphone应用程序状态变化?

我发布了这个问题(连同答案),以便其他人可以从我已经进化到让模块自动检测(并响应)iOS 应用程序状态更改的巧妙技术中受益。(格式化的)博客讨论在这里我的博客

0 投票
4 回答
96 浏览

cocoa - 是否有在 Cocoa 子类中命名实例变量的首选方式?

当子类化像 MKMapView 这样的类时,是否有一种首选的方式来命名新添加的实例变量?苹果说它保留下划线前缀供自己使用,所以我可以继续使用我喜欢的任何东西而不用担心可能的冲突吗?

0 投票
1 回答
65 浏览

objective-c - 如何使用各种类型的对象填充堆栈

使用 NSMutableArray ivar,我计划编写一个类似于堆栈的类,并且应该能够从中检索各种类型的对象。

每当该堆栈因几乎所有对象都已被检索而威胁用完对象时,它应该通过从某种尽可能通用的“对象发射器”中获取新对象来自动将新对象推送到自身上。例如,应该有请求类返回 NSImages 或 NSString 或任何其他可以想象的类型的实例,这些类型应该放在堆栈上,但每个都必须事先以单独的方式处理。

将这些对象发射类“插入”到我的堆栈类中的最简单模式是什么?堆栈类不需要知道它必须处理的对象类型,这是一些“帮助类”可能设置它的地方 - 但我不知道它们的位置在哪里。我尝试使用 NSClassFromString 进行动态创建,但感觉不太对劲。