随笔分类 -  Cocoa开发

iOS,Mac开发技术
摘要:XCode 内置GDB,我们可以在命令行中使用 GDB 命令来调试我们的程序。下面将介绍一些常用的命令 po, print, info, help 等以及调试技巧。 阅读全文
posted @ 2012-01-31 16:02 飘飘白云 阅读(4132) 评论(0) 推荐(0) 编辑
摘要:在前文《深入浅出Cocoa之类与对象》一文中,我已经详细介绍了ObjC中的 Class 与 Object 的概念,今天我们来如何在运行 时动态创建类。下面这个函数就是应用前面讲到的Class,MetaClass的概念,在运行时动态创建一个类。这个函数来自《Inside Mac OS X-The Objective-C Programming Language》。 阅读全文
posted @ 2012-01-30 14:02 飘飘白云 阅读(3616) 评论(2) 推荐(3) 编辑
摘要:最近打算写一些ObjC中比较底层的东西,尤其是 runtime 相关的。苹果已经将 ObjC runtime 代码开源了,我们可以从:http://opensource.apple.com/source/objc4/objc4-493.9/runtime/ 浏览源代码,或点此下载源代码。 从哪里入手呢?那当然是最基本的类与对象。与C++相比,ObjC中的类与对象结构要简洁与一致得多(参考《深度探索C++对象模型》,你就知道C++中类与对象结构的复杂)。本文将详细讲解ObjC中类与对象的结构,下回将讲如何在 runtime 时操作类。 阅读全文
posted @ 2012-01-19 16:59 飘飘白云 阅读(5951) 评论(9) 推荐(5) 编辑
摘要:在前文深入浅出Cocoa之消息中,我简要介绍了ObjC 中消息的基本情况,包括SEL查找,缓存以及消息转发等。在本文中,我要介绍一个很有趣的技术,Method swizzling,通过这个手法,我们可以动态修改方法的实现,从而达到修改类行为的目的。当然,还有其他办法(如 ClassPosing,Category)也可以达到这个目的。ClassPosing 是针对类级别的,是重量级的手法,Category 也差不多,比较重量级,此外 Category 还无法避免下面的递归死循环(如果你的代码出现了如下形式的递归调用,应该考虑一下你的设计,而不是使用在这里介绍的 Method Swizzling 手法,:))。 阅读全文
posted @ 2012-01-05 17:01 飘飘白云 阅读(4958) 评论(0) 推荐(4) 编辑
摘要:Three20 是 facebook 开源的一款功能齐全又强大的库,覆盖 UI,network,JSON/XML解析等。其 github 仓库在这里:https://github.com/facebook/three20 ,这个页面也有如何在工程中添加 three20 库的介绍,不过在 Lion 版下以及 xcode 4.2 下有些许不同,英文好的同学可以参看原文。现整理如下: 阅读全文
posted @ 2011-12-31 17:26 飘飘白云 阅读(945) 评论(2) 推荐(0) 编辑
摘要:使用 OCMock 进行 unit test 时,我们无法 stub 或 expect 类方法,那么又该怎样测试类方法呢?下面是一个解决办法:在测试类中的非类方法 wrap 一下类方法,然后测试 wrap 方法。 阅读全文
posted @ 2011-12-27 14:25 飘飘白云 阅读(928) 评论(0) 推荐(0) 编辑
摘要:XCode 内置了 OCUnit 单元测试框架,但目前最好用的测试框架应该是 GHUnit。通过 GHUnit + OCMock 组合,我们可以在 iOS 下进行较强大的单元测试功能。本文将演示如何在 XCode 4.2 下使用 OCUnit, GHUnit 和 OCMock 进行单元测试。 阅读全文
posted @ 2011-12-23 12:50 飘飘白云 阅读(9523) 评论(0) 推荐(2) 编辑
摘要:搜集整理了一些有关申请开发者证书,授权,申请证书,发布应用程序方面的资料,经验证,比较准确,特此保存。 1,申请 IDP 图文教程 2,如何成为一个合格的iOS开发者 3,如何为 iTunes Connect 准备应用 4,如何使用iOS授权以及如何申请证书 5,如何联机调试以及发布程序 阅读全文
posted @ 2011-12-22 20:42 飘飘白云 阅读(616) 评论(0) 推荐(0) 编辑
摘要:花了几天的时间,做了一个简陋的 Dicom viewer,这个查看器没有使用 DCMTK 库,而是自己移植了一个 Dicom 文件解析器(Thanks toAmarnath S and his greatpost.)。该Dicom 文件解析器已经开源,源代码在这里 or https://github.com/kesalin/DicomViewer。 贴几张效果图先: Dicom 文件列表 阅读全文
posted @ 2011-11-18 06:34 飘飘白云 阅读(1288) 评论(1) 推荐(1) 编辑
摘要:DCMTK是德国 Offis 公司开发的实现 DICOM 协议的跨平台开源 C++库,在医学领域里是很有名的,它支持Windows ,Linux,Mac OS,SUN等平台。不过貌似在 iOS 平台上编译 DCMTK 的文档很少很少,折腾了好久终于编译成功了,记录下来。 阅读全文
posted @ 2011-11-10 12:41 飘飘白云 阅读(1226) 评论(0) 推荐(0) 编辑
摘要:XCode 4 默认支持 Git 作为代码仓库,当我们新建一个仓库的时候,可以勾选创建默认仓库,只不过这个仓库是在本地的。本文介绍如何在 mac 机器上创建 Git 服务器,总体思路是:使用 gitosis 来简化创建过程,在用作服务器的机器上创建一个名为 git 的账户来创建 git 服务器,其他客户端通过 ssh 机制访问 git 服务器。 阅读全文
posted @ 2011-11-07 16:09 飘飘白云 阅读(1255) 评论(0) 推荐(0) 编辑
摘要:苹果Cocoa编码规范 阅读全文
posted @ 2011-11-02 16:36 飘飘白云 阅读(2162) 评论(0) 推荐(0) 编辑
摘要:Objective C 的类方法(class method),即 static 方法,那些用 + 修饰的方法。类方法是属于类对象的,所以无需创建类的实例对象我们就可以直接使用它们。使用形式为: [ClassName classMethod]; 在这里 ClassName 代表的就是一个类对象,而不是作为一种类型。类名只有出现接收消息的表达式中才代表一个类对象,其他情况下都表示一种类型。 阅读全文
posted @ 2011-11-01 12:34 飘飘白云 阅读(540) 评论(0) 推荐(0) 编辑
摘要:在前文深入浅出 Cocoa 之 Framework中讲解了 Framework,接下来讲解 plugin。如果你对 Framework 还不太熟悉的话,请阅读那篇文中,在本例中使用到了 framework,并在本文中没有详细讲述其创建和使用过程。 本文代码下载:点击这里 为什么要引入插件? 我们知道编译程序时,会连接相关 framework,通常我们所连接的框架是 Foundation 和 Application 框架。当程序启动运行时,每个被连接到的 framework 都会被加载到该程序的 objc 运行时环境中。如果我们想向正在运行的程序加载新的 framework,那该怎么办呢?答案之一就是使用 plugin 机制。cocoa 的 plugin 机制通常由 NSBundle 类来实现,而实现动态加载的功能由函数 objc_addClass 来完成。一般我们无需与 objc_addClass 这个函数打交道,我们使用 NSBundle 来完成绝大部分与 plugin 相关的工作。 阅读全文
posted @ 2011-10-28 13:35 飘飘白云 阅读(1644) 评论(0) 推荐(1) 编辑
摘要:扩展名 pch 表示 “precompliled header”,即预编译头文件,prefix.pch 为 XCode 工程默认生成的预编译头文件,在其中我们可以定制一些全局的宏,以方便开发。 阅读全文
posted @ 2011-10-16 20:58 飘飘白云 阅读(2359) 评论(0) 推荐(0) 编辑
摘要:Mac OS X 扩展了 framework 的功能,让我们能够利用它来共享代码和资源。framework 在概念上有点像 Window 下的库,但是比库更加强大,通过 framework 我们可以共享所有形式的资源,如动态共享库,nib 文件,图像字符资源以及文档等。系统会在需要的时候将 framework 载入内存中,多个应用程序可以同时使用同一个 framework,而内存中的拷贝只有一份。一个 framework 同时也是一个 bundle,我们可以在 finder 里浏览其内容,也可以在代码中通过 NSBundle 访问它。利用 framework 我们可以实现动态或静态库的功能。与动态/静态库相比,framework 有如下优势: 第一,framework 能将不同类型的资源打包在一起,使之易于安装,卸载与定位; 第二,framework 能够进行版本管理,这使得 framework 能不断更新并向后兼容; 第三,在同一时间,即使有多个应用程序使用同一 framework,但在内存中只有一份 framework 只读资源的拷贝,这减少了对内存的占用 阅读全文
posted @ 2011-10-16 13:43 飘飘白云 阅读(2857) 评论(0) 推荐(0) 编辑
摘要:最近在研究如何在 Mac 上使用 Silverlight,在这个过程中,找到几种好玩的东西: 第一个是,CSharpPlugin,链接为:http://code.google.com/p/cocoa-sharp-dev/wiki/CSharpPlugin,这个插件很神奇,可以让我们在 XCode 中编写 C#,并在编写的C#中可以调用 Cocoa API,牛吧?可惜的是这个插件很久没有更新了,最后的更新时间为 2007年5月。 第二个是,MonoDevelop,链接为:http://monodevelop.com/,一般我们还需要安装 Moonlight 。我们可以在其中编写具有 Cocoa 界面风格的 C# 程序。这个 IDE 做得非常清爽,并在持续更新中。 第三个是, 使用 Emonic 插件在 Eclipse 上开发,下面将介绍这种方式 阅读全文
posted @ 2011-10-15 14:17 飘飘白云 阅读(642) 评论(0) 推荐(0) 编辑
摘要:XCode 会自动为新建的工程创建本地 Git 仓库,但是如何为已有的工程创建 Git 仓库呢?Google 到下面这篇文章,贴在下面了。 原文链接:点击这里 其中 ignore文件下载为:https://github.com/github/gitignore/blob/master/Objective-C.gitignore Creating a git repository for an existing Xcode project ∞ 阅读全文
posted @ 2011-09-28 15:44 飘飘白云 阅读(774) 评论(0) 推荐(0) 编辑
摘要:本文通过使用 Bonjour 实现了一个简单的服务器/客户端聊天程序,演示了 CFSocket,NSNetService/NSNetServiceBrowser, NSInStream/NSOutStream 的用法。 代码下载:点击这里 效果图如下: 阅读全文
posted @ 2011-09-15 21:42 飘飘白云 阅读(15945) 评论(8) 推荐(1) 编辑
摘要:NSDocument 并无 setTitle 这样设置标题的方法,但有两者途径可以设置 document 的显示名: 其一,NSDocument 有一个 displayName 的方法,该方法默认实现是显示最后与该文档关联文件的名字(不显示无后缀),如果没有文件与之关联,则显示"Untitled",我们可以修改该方法的实现,返回要显示的名称。下面的这个实现,显示其中第一个 windowController 所指 window 的 title 当作文档显示名称。 阅读全文
posted @ 2011-09-08 17:46 飘飘白云 阅读(574) 评论(0) 推荐(0) 编辑

本博客遵循 Creative Commons License “署名-非商业用途-保持一致”创作共用协议。 与我联系