10个迷惑新手的Cocoa&Objective-c开发问题

  1. language background
  2. run­time
  3. thread
  4. run­loop
  5. protocol, del­e­gate
  6. event respon­der
  7. mem­ory management
  8. class heritage, category and extensions
  9. drawing issue
  10. design pattern

首先请谅解我可能使用很多英文,毕竟英文资料将来会是你的主要资料来源。

这篇教程将描述一些我见到的众多Cocoa开发新手遇到的问题和障碍。并不会手把手教你:“这个函数什么意思,哪个函数如何使用”,而是站在一定高度,统观各种技术所处的角色,让你不会迷失在各种技术细节中。在你继续深入学习MacOS编程之前,请停下脚步看清楚这些问题。如果你是新手,这个教程不要希望一次能看的非常透彻,学一定阶段反回来再看看又会有新的体会的。

Continue reading

LXFoundation for Cocoa programmers

做为一个 OSX 和 iOS 软件开发者,使用 Objective-C 和 Cocoa 开发应该算是王道。尽管 Apple 为开发者提供了一系列方便的类和函数,但是绝对所有 Cocoa 开发者都遇到过这样让人头痛的问题:

*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil
*** setObjectForKey: object cannot be nil (key: username)

Cocoa 自带的容器 NSMutableArray 和 NSMutableDictionary 总是无法强壮的处理一些不正确的值。结果往往是导致程序轻则异常,重则崩溃。而更为难的是,当程序变得庞杂起来的时候,xcode 的 debugger 很难定位这样一个错误。

下面我在 GitHub 上发布一个我自己写的开源库 LXFoundation 目标就是解决这类问题。我已经把它用在了自己的软件中,目前表现稳定。 Continue reading

Miao, Mac微博客户端开发随笔

iCloud icons

iCloud icons

大约从2010年开始,我就计划开发一个自己的微博客户端!开始命名为 iCloud,意思是云云,漫画里对话框的泡泡。可惜后来(2011年6月)这个名字让Apple官方拿去用了,iCloud 改名成了 Miao。也没什么好抱怨的,我并没有注册过这个名字,也没做出东西。这里是关于做这个软件的过程和背后的故事。 Continue reading

建立家庭漫画服务器,从iPad上看漫画

好,故事开始。以前就在想,在retina屏幕的iPad上看漫画该多爽。可是现在捧着iPad却发现看漫画很困难,自己电脑上下载了一堆漫画都是jpg图片,导入iBook也很麻烦。现在通过家里的iMac建立一个家庭漫画服务器,直接在线浏览速度快、体验好,而且还很方便。以后下载了漫画往目录里一扔,就可以拿起iPad看了。

Continue reading

Cocoa中取得服务器响应头

之前有朋友问我,如果取得HTTP的服务器响应头。然后给我看了一下他的方法。是通过NSURLConnection在delegate方法connection:didReceiveResponse:里取得的,并且Request没有设定成HEAD请求。

其实在不少情况下,如果程序只是取的header不会做进一步动作。那么可以做一点优化,只做一个HEAD请求。HEAD请求
是在HTTP/1.0就定义的请求之一。而且服务器对HEAD请求响应往往更迅速。

Continue reading

Cocoa中编写你自己的变参格式化函数

问题背景

近几天,手头做的Mac下的新浪微博客户端Miao的就要收工了,在做一些代码优化方面的工作。其中就遇到了这么一个具体的问题。客户端核心引擎会统一向新浪发送不同的请求。当然这些请求是针对统一域的,但是携带不同的参数。例如:

http://api.weibo.com/statuses/friends.json?source=xxxxxx&screen_name=abc
http://api.weibo.com/statuses/friends.json?source=xxxxxx&screen_name=abc&count=100
http://api.weibo.com/statuses/public_timeline.json?source=xxxxxx&page=1&count=200
http://api.weibo.com/comments/timeline.json?source=xxxxxx&count=100

显然,程序需要在每个请求函数里建立这样一个请求的url地址。那么如何统一处理这些请求地址呢?这篇文章会向大家介绍一个C程序员都知道,但是又比较冷的技术,来处理这个问题。

Continue reading

Cocoa中NSString到NSDate的处理

NSDate是NS类库中基础类型之一。社交化时代,用户应用程序对数据处理量越来越大,我们经常从服务器取得的日期是字符串序列,格式化为正确的date类型是一个不可避免的工作。在Cocoa程序里提供了非常方便的函数和类,但是仍然需要我们了解一些技巧。尤其是当我们的程序面对大量的日期字符串转换的时候,要格外的注意。苹果文档中使用NSDateFormatter类格式化日期字符串,但是以防读者不知道,我这里提一下:它的速度非常慢!!这篇文章介绍如何处理这种情况。

Continue reading

Web应用中一种用户友好Email验证模式

每过一段时间,我的网站和论坛就会出现注册邮件错误问题。而且往往是缺少某个字符这样的错误。例如:hotmail.com写成了hotmai.com 对于这种意图明确但又不容易发现的错误,普通邮件格式验证函数是无法处理的。因为这种拼写错误依然属于合法邮件地址。但是一个友好的Web页面应该给与用户适当的提示。这里我提出一个容易想到的简单方法处理这个问题。

Continue reading

非负矩阵分解的文本聚类

文本分类、聚类算法中,最常见的障碍就是高维矩阵。对于具有一定规模的文本聚类很轻易会遇到维度成千上万的矩阵,如果按照常规计算方法,耗时将不可估量。而非负矩阵分解则是非常好的降维理论,利用非负矩阵分解我们可以将高维矩阵分解为可接受的小维矩阵,并保持其原矩阵的特征。这篇文章将介绍如何利用非负矩阵分解做文本聚类。非负矩阵分解英文全称是 Non-negative matrix factorization(NMF)。请您记住本文只做文本聚类,并不介绍如何中文分词。

Continue reading