为Cocoa(触摸)开发创建自己的库的指南

我目前正在使用许多与自定义方法相同的子类对象。 创建我自己的库可以更方便,我可以用于几个项目

目标是让我自己的类与UIViewCGRect等类一样可用,包括CGRect等方便的方法,包括类和结构。 总结一下,我想创建自己的等价物:

  • UIView这样的课程
  • CGRect这样的CGRect
  • CGRectMake这样的便捷function
  • 将它作为库提供
  • 将其作为XCode模板提供,因此,将这些自定义对象作为XCode中的“新文件”提供

所以基本上我正在寻找有关如何创建类,结构等的说明,以便创建上述所有内容。 做这个的最好方式是什么? 320项目似乎是一个很好的起点。 但它缺乏(我认为):

  • 立即在新项目中提供图书馆
  • 在“新文件”下提供新类

即使我要创建自己的静态库, 我是否能够在应用程序商店中发布应用程序 ,因为手机不支持链接到第三方库?

为方便起见,这些基本上是子问题,涵盖了这个问题的范围:

  • 如何为Mac / iPhone开发创建自己的库?
  • 如何为此库创建类,结构和内联函数?
  • 如何基于此库创建自己的Xcode模板?
  • 我是否可以使用自己的静态库发布iPhone应用程序?

如果你是为Mac做这个,你就要创建一个框架。 但是,你提到UIView ,显然你正在使用iPhone。 Apple不允许iPhone应用程序在运行时动态链接其他库,因此您唯一的选择是创建静态库。 静态库在构建时链接到应用程序可执行文件中。

据我所知,Xcode中没有静态库项目模板。 您可能需要做的是从另一个iPhone Xcode模板开始并添加静态库目标。 继续使用默认的应用程序目标; 您可以使用它来构建一个简单的测试应用程序,以确保库实际工作。

要在应用程序中实际使用库,您需要两件事:编译库(它具有.a扩展名)和所有头文件。 在完成的应用程序中,您将链接到静态库,并且您需要#import头文件,以便编译器了解可用的类,函数等。 (一种常见的技术是创建一个导入所有其他文件的头文件。这样,您只需要在源文件中导入一个文件。)

至于创建自己的自定义模板,这里有一个简单的教程可以帮助您入门: http : //www.macresearch.org/custom_xcode_templates您可以复制默认模板,并根据您的需要自定义它们。

struct语法如下所示:

 typedef struct _MyPoint { CGFloat x; CGFloat y; } MyPoint; 

结构是在头文件中声明的,因此您可以(我相信)Command + Double单击结构的名称以查看它是如何声明的。

创建结构的另一个小技巧是做这样的事情:

 MyPoint aPoint = (MyPoint){ 1.5f, 0.25f }; 

因为编译器知道结构中字段的顺序,所以它可以非常容易地将您在花括号中提供的值与相应的字段进行匹配。 当然,拥有像MyPointMake这样的函数会更方便,所以你可以像这样写:

 MyPoint MyPointMake(CGFloat x, CGFloat y) return (MyPoint){ x, y }; } 

请注意,这是一个函数,而不是一个方法,因此它存在于任何@interface@implementation上下文之外。 虽然我不认为编译器会抱怨你是否在@implementation上下文中定义它。

CGPointMake被定义为所谓的inline函数。 你也可以在Cocoa头文件中看到它的定义。 (内联函数和普通函数之间的区别在于编译器可以用CGPointMake副本替换对CGPointMake调用 ,这避免了进行函数调用的开销。这是一个非常小的优化,但对于一个简单的函数,这说得通。)

FYI Xcode 3.2有一个名为Cocoa Touch Static Library的新项目模板。 你可能想要走那条路。

320项目是iPhone类库的一个很好的例子。 您基本上将项目编译为.a库,然后在客户端项目中静态链接。

由于这是一个社区维基,我认为链接一些资源和教程会很有帮助:

http://blog.stormyprods.com/2008/11/using-static-libraries-with-iphone-sdk.html

http://www.clintharris.net/2009/iphone-app-shared-libraries/

请享用!

320项目确实是一个很好的起点。 但它缺乏(我认为):

  • 立即在新项目中提供图书馆
  • 在“新文件”下提供新类

这些是项目和文件模板。 有关更多信息, 请咨询Google 。

如果您打算在应用程序商店中发布此function,您将无法以您希望的方式使用您的库。 如上所述,手机不支持链接到第三方库。 我认为有一种“黑客”方式可以让它发挥作用,但你会失去分配。

我能想到的最好的方法是将所有相关代码放在一个目录中并以这种方式共享。 我知道它不那么优雅,但它的局限性即。 我们无法控制。