iPhone入门学习汇总

目录

1  AddressBook学习笔记  
2  UITabBarController学习笔记  
3  Objective-C学习文档  
4  半翻页动画效果例子  
5  iPhone学习文档_快捷键  
6  MKMapView学习笔记  
7  CoreLocation定位学习笔记  
8  Mac入门学习笔记  
9  iPhone静态库学习笔记  

iPhone入门学习汇总_第1张图片

编辑本段 回目录AddressBook学习笔记

一.基本知识

和UINavigationController类似,UITabBarController也可以用来控制多个页面导航,用户可以在多个视图控制器之间移动,并可以定制屏幕底部的选项卡栏。

借助屏幕底部的选项卡栏,UITabBarController不必像UINavigationController那样以栈的方式推入和推出视图,而是组建一系列的控制器(他们各自可以是UIViewController,UINavigationController,UITableViewController或任何其他种类的视图控制器),并将它们添加到选项卡栏,使每个选项卡对应一个视图控制器。

二.具体介绍

1.通过代码的方式创建UITabBarController界面

代码的位置应该放在xxxAppDelegate.m中的applicationDidFinishLaunching:方法中,因为Tab Bar Controller通常是为应用窗口提供根视图,所以需要在程序启动后,窗口显示前创建Tab Bar Controller。具体创建步骤为:

(1)创建一个新的UITabBarController对象

(2)为每一个Tab创建一个root view controller

(3)把这些root view controllers添加到一个array中,再把这个array分配给tab bar controller的viewControllers属性

(4)把tab bar controller's view添加到应用程序主窗口

例子:

- (void)applicationDidFinishLaunching:(UIApplication *)application {

   tabBarController = [[UITabBarController alloc] init];

   MyViewController* vc1 = [[MyViewController alloc] init];

   MyOtherViewController* vc2 = [[MyOtherViewController alloc] init];

   NSArray* controllers = [NSArray arrayWithObjects:vc1, vc2, nil];

   tabBarController.viewControllers = controllers;

   // Add the tab bar controller's current view as a subview of the window

  [window addSubview:tabBarController.view];

}

2.通过代码的方式创建TabBarItem

Tab Bar Controller的每个选项卡都得有一个UITabBarItem,可以在其root view controller初始化时创建并添加UITabBarItem。

例子:

- (id)init {

   if (self = [super initWithNibName:@"MyViewController" bundle:nil]) {

     self.title = @"My View Controller";

      UIImage* anImage = [UIImage imageNamed:@"MyViewControllerImage.png"];

      UITabBarItem* theItem = [[UITabBarItem alloc] initWithTitle:@"Home" image:anImage tag:0];

      self.tabBarItem = theItem;

      [theItem release];

   }

   return self;

}

编辑本段 回目录UITabBarController学习笔记

一.基本知识

和通讯录中联系人相关的应用iPhone提供了两个框架:AddressBook.framework和AddressBookUI.framework,使用这两个框架我们可以在程序中访问并显示iPhone数据库中的联系人信息。

二.具体介绍

1.AddressBookUI显示部分

AddressBookUI中提供了和联系人显示信息相关的一些Controller,有四个:

ABPeoplePickerNavigationController:显示整个通讯录并可以选择一个联系人的信息

ABPersonViewController:显示一个具体联系人的信息

ABNewPersonViewController:增加一个新的联系人

ABUnknownPersonViewController:完善一个联系人的信息

由于其中最主要的是ABPeoplePickerNavigationController,因此就具体的介绍一下通过程序显示整个通讯录并且可以选择其中某个联系人信息的步骤。

(a)创建并初始化一个ABPeoplePickerNavigationController对象

(b)设置其代理(delegate)

(c)用presentModalViewController:animated:这个方法进行显示整个通讯录页面

例子:

- (IBAction)showPicker:(id)sender {

    ABPeoplePickerNavigationController *picker =

    [[ABPeoplePickerNavigationController alloc] init];

    picker.peoplePickerDelegate = self;

    [self presentModalViewController:picker animated:YES];

   [picker release];

}

ABPeoplePickerNavigationControllerDelegate的方法介绍

(a)peoplePickerNavigationControllerDidCancel:当用户选择取消时调用这个方法,可以在这个方法里取消整个通讯录页面的显示。

(b)peoplePickerNavigationController:shouldContinueAfterSelectingPerson:当用户选择了通讯录中某一个联系人时调用这个方法,可以在这里获取联系人的信息。如果希望可以继续显示这个联系人更具体的信息,则return YES。否则取消整个通讯录页面的显示并return NO。

(c)peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:如果上一个方法返回的是YES,则会显示某一个联系人信息,如果选择了联系人的某一项纪录,就会调用这个方法,可以通过点击选择联系人的某一项信息。如果希望可以对选择的某一项纪录进行进一步操作,比如直接拨打电话或调用邮箱发送邮件,则return YES。否则取消整个通讯录页面的显示并return NO。

例子:

- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {

// assigning control back to the main controller

[picker dismissModalViewControllerAnimated:YES];

}

- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {

//获取联系人姓名

name.text = (NSString*)ABRecordCopyCompositeName(person);

//获取联系人电话

ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty);

NSMutableArray *phones = [[NSMutableArray alloc] init];

int i;

for (i = 0; i < ABMultiValueGetCount(phoneMulti); i++) {

NSString *aPhone = [(NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, i) autorelease];

NSString *aLabel = [(NSString*)ABMultiValueCopyLabelAtIndex(phoneMulti, i) autorelease];

NSLog(@"PhoneLabel:%@ Phone#:%@",aLabel,aPhone);

if([aLabel isEqualToString:@"_$!<Mobile>!$_"])

{

[phones addObject:aPhone];

}

}

phoneNo.text=@"";

if([phones count]>0)

{

NSString *mobileNo = [phones objectAtIndex:0];

phoneNo.text = mobileNo;

//NSLog(mobileNo);

}

//获取联系人邮箱

ABMutableMultiValueRef emailMulti = ABRecordCopyValue(person, kABPersonEmailProperty);

NSMutableArray *emails = [[NSMutableArray alloc] init];

for (i = 0;i < ABMultiValueGetCount(emailMulti); i++)

{

NSString *emailAdress = [(NSString*)ABMultiValueCopyValueAtIndex(emailMulti, i) autorelease];

[emails addObject:emailAdress];

}

email.text=@"";

if([emails count]>0)

{

NSString *emailFirst=[emails objectAtIndex:0];

email.text = emailFirst;

//NSLog(emailFirst);

}

[peoplePicker dismissModalViewControllerAnimated:YES];

return NO;

}

- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker

 shouldContinueAfterSelectingPerson:(ABRecordRef)person

property:(ABPropertyID)property

  identifier:(ABMultiValueIdentifier)identifier{

return NO;

}

2.AddressBook部分

AddressBook框架部分主要是记录联系人的各个信息,ABRecordRef类型的记录既可以代表单个人(kABPersonType),也可以是一个集合(kABGroupType)。

通讯录中联系人的各个属性有两种形式,单值属性和多值属性。单值属性对应的只有一个值,比如联系人的姓名;多值属性对应的可能有多个值,比如联系人有多个电话号码等。

(a)常用方法

CFTypeRef ABRecordCopyValue (

   ABRecordRef record,

   ABPropertyID property

);

从一个记录中获取某个属性对应的值

(b)单值属性对应的方法

CFStringRef ABRecordCopyCompositeName (

   ABRecordRef record

);

获取联系人完整的姓名。

(c)多值属性对应的方法

CFTypeRef ABMultiValueCopyValueAtIndex (

   ABMultiValueRef multiValue,

   CFIndex index

);

返回对应位置处的属性值

CFStringRef ABMultiValueCopyLabelAtIndex (

   ABMultiValueRef multiValue,

   CFIndex index

);

返回对应位置处的属性标识

CFArrayRef ABMultiValueCopyArrayOfAllValues (

   ABMultiValueRef multiValue

);

返回包含所有属性值的数组

CFIndex ABMultiValueGetCount (

   ABMultiValueRef multiValue

);

返回属性值的个数

例子:
//获取联系人姓名
name.text = (NSString*)ABRecordCopyCompositeName(person);
//获取联系人电话
ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty);

NSMutableArray *phones = [[NSMutableArray alloc] init];
int i;
for (i = 0; i < ABMultiValueGetCount(phoneMulti); i++) {

NSString *aPhone = [(NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, i) autorelease];

NSString *aLabel = [(NSString*)ABMultiValueCopyLabelAtIndex(phoneMulti, i) autorelease];

NSLog(@"PhoneLabel:%@ Phone#:%@",aLabel,aPhone);

if([aLabel isEqualToString:@"_$!<Mobile>!$_"])

{
[phones addObject:aPhone];

}
}

编辑本段 回目录Objective-C学习文档

一.数据类型

1.NSRange
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
2.NSPoint,NSSize,NSRect
3.NSString
方法1:(类方法)stringWithFormat [NSString stringWithFormat:@""]
方法2:length
方法3:isEqualToString [实例名1 isEqualToString:实例名2]
方法4:compare 可以带参数
方法5:hasPrefix hasSuffix
4.NSMutableString
方法1:(类方法)stringWithCapacity [NSMutableString stringWithCapacity:表示大小的数字]
方法2: appendString  appendFormat
方法3: deleteCharactersInRange  rangeOfString 
5.NSArray
方法1:(类方法)arrayWithObject 逗号分隔,以nil结束
方法2:count  objectAtIndex
6.NSMutableArray
方法1:(类方法)arrayWithCapacity
方法2:addObject  removeObjectAtIndex
7.NSEnumerator
方法1:objectEnumerator   reverseObjectEnumerator
方法2:nextObject
8.NSDictionary
方法1:(类方法)dictionaryWithObjectsAndKeys 接收对象和关键字交替的存储的系列,以nil结束
方法2:objectForkey
9.NSMutableDictionary
方法1:(类方法)dictionaryWithCapacity
方法2:setObject:forKey: removeObjectForKey
10.NSNumber
用来把基本数据类型包装成对象的形式
11.NSValue
可以包装任意值
12.NSNull
[NSNull null]表示空
二.内存管理

1.Cocoa内存管理规则

(1)当你使用new、alloc或copy方法创建一个对象时,该对象的保留计数器值为1。当不再使用该对象时,你要负责向该对象发送一条release或autorelease消息(用完后或者在dealloc方法中进行统一释放)。这样,该对象将在其使用寿命结束时被销毁。

(2)当你通过任何其他方法获得一个对象时,则假设该对象的保留计数器值为1,而且已经被设置为自动释放,因此就不需要执行任何操作来确保该对象被清理。

自动释放池:

    NSAutoreleasePool *pool;

pool = [[NSAutoreleasePool alloc] init];

[pool release];

如果你打算在一段时间内拥有该对象(使用retain方法),则需保留它并确保在操作完成时释放它(用完后或者在dealloc方法中进行统一释放)。

(3)如果你保留了某个对象,则需要(最终)释放或自动释放该对象。必须保持retain方法和release方法的使用次数相等。

注:简单来说,如果使用了alloc,new或copy方法获得一个对象,则必须进行释放该对象操作。

三.对象初始化

1.基本知识

(1)Objective-C创建对象有两种方法:

[类名 new]:直接new一个新对象

[[类名 alloc] init]:先为对象分配内存空间,再为其初始化

(2)在Cocoa中,对象分配和初始化是两个分离的操作:来自NSObject的类方法alloce为对象分配一块内存并将其清0;实例方法init用于获得一个对象并使其运行

2.便利初始化函数

一个类中有的多个初始化函数,即多个以init开头的方法。

3.指定初始化函数

类中的某个初始化方法被指派为指定初始化函数,该类的所有初始化方法使用指定初始化函数执行初始化操作。子类使用其超类的指定初始化函数实现超类的初始化。
四.特性(property)

1.基础知识

特性的预编译指令为@property,作用是自动声明属性的setter和getter方法,因此就不必再有为每个属性都写的访问器方法而产生的冗长代码了。

即使用预编译指令@property通知编译器为对象的属性的setter和getter自动生成方法声明。

同时使用@synthesis预编译指令通知编译器生成对应的访问器方法。

2.格式

在.H文件中声明:@property 类型 变量名;

在.M文件中实现:@synthesis 变量名;

3.相关的点语法

访问属性的setter和getter方法有两种方式:

(1)[对象 属性方法]:Objective-C特有的正规的[ ]方式

(2)对象.属性方法:和其他语言类似的.方式

4.特行扩展

在特性的声明里可以指定属性的一些要求,比如copy,retain,nonatomic,readwrite(默认),readonly等,方式为比如

@property (retain,nonatomic) 类型 变量;

五.类别

1.基本知识

类别是为现有的类添加新方法的方式

2.格式

(1)声明:

@interface 类名(类别名)

方法列表

@end

(2)实现:

@implementation 类名(类别名)

方法实现部分

@end

3.类别局限性

(1)类别只能添加新方法,无法添加新的实例变量

(2)如果类别名和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级

4.类别的作用

通过类别的方式,可以将类的实现分散到不同的文件里。

六.协议

1.基本知识

Objective-C的协议类似Java里的接口概念

2.格式

(1)声明:

@Protocol 协议名称

方法声明列表

@end

(2)对象采用协议:在@interface类声明的后面添加<协议名称>

@interface 类名 <协议名称>

(3)对象实现协议:在@implementation里实现协议的方法

@implementation 类名

实现协议的方法

@end

3.Objective-C2.0中协议的新特性

(1)@optional预编译指令:表示可以选择实现的方法

(2)@required预编译指令:表示必须强制实现的方法

编辑本段 回目录半翻页动画效果例子

iPhone中的页面间切换动画效果比较漂亮,今天
学习了下其中一个类似翻页的动画效果,并经过修改做成
类似地图卷起一角的那种形式。
附一张截图:

iPhone入门学习汇总_第2张图片

编辑本段 回目录iPhone学习文档_快捷键

一.常用快捷键

1.Xcode部分:

win+N:新建文件

win+shift+N:新建工程

win+O:打开工程或文件

win+S:保存

win+shift+S:另存为


win+Z:撤销一步

win+W:关闭工程

win+Q:推出Xcode


win+B:编译项目

win+R:编译并运行

win+shift+B:查看编译结果

win+Y:编译并调试

win+Alt+R:运行

win+Alt+Y:调试

win+shift+R:查看运行结果


win+shift+E:扩展或压缩编辑器窗口

win+[:左移代码块

win + ];右移代码块

Tab:接受代码提示

Esc:显示代码提示菜单

Ctrl+/:移动到代码提示的下一个占位符

win+Alt+向上箭头:在.h和.m文件间切换


2.Interface Build(IB)部分:

win+shift+L:打开库(Library)面板窗口

win+shift+I:打开检查器(Inspector)面板窗口

win+1到7:可以直接打开检查器窗口包含的属性(attributes),效 果(effect),大小(size),绑定(binging),连接 (connecting),指示(identify),苹果脚本(applescript) 等子窗口

win+R:仿真构造的界面

win+shift+R:编译界面部分并回到Xcode


3.iPhone模拟器部分:

Win+H:隐藏模拟器

Win+Alt+H:隐藏其他,只剩模拟器界面

Win+Q:推出模拟器

Win+左箭头:向左旋转模拟器,再按一次则恢复

Win+右箭头:向右旋转模拟器,再按一次则恢复

Win+shift+H:把模拟器恢复到主界面

Win+L:锁定模拟器界面


注:基本上每个操作都有对应的快捷键,如果还有其他操作

需要使用快捷键,查看菜单栏后面的提示

编辑本段 回目录MKMapView学习笔记

一.基本知识

iPhone可以使用CoreLocation框架确定他的物理位置,可以利用三种技术来实现该功能:GPS,WIFI定位和蜂窝基站三角网定位。但在程序中我们只需设定我们希望的精度级别,由CoreLocation决定采用哪种技术可以更好的满足我们的请求。

二.具体介绍

1.位置管理器


CLLocationManager *locationManager = [[CLLocationManager alloc] init];//创建位置管理器


locationManager.delegate=self;//设置代理


locationManager.desiredAccuracy=kCLLocationAccuracyBest;//指定需要的精度级别

locationManager.distanceFilter=1000.0f;//设置距离筛选器

[locationManager startUpdatingLocation];//启动位置管理器

2.位置管理器代理

主要的代理方法有两个

//确定当前位置和位置更新了时调用这个方法

- (void)locationManager:(CLLocationManager *)manager

didUpdateToLocation:(CLLocation *)newLocation

   fromLocation:(CLLocation *)oldLocation

{

NSString *latitudeString=[[NSString alloc] initWithFormat:@"%g",newLocation.coordinate.latitude];

//latitudeLabel.text=latitudeString;

[latitudeString release];

NSString *longitudeString=[[NSString alloc] initWithFormat:@"%g",newLocation.coordinate.longitude];

//longitudeLabel.text=longitudeString;

[longitudeString release];

}

//位置查询遇到错误时调用这个方法

- (void)locationManager:(CLLocationManager *)manager

   didFailWithError:(NSError *)error

{

NSString *errorType = (error.code == kCLErrorDenied) ?

    @"Access Denied" : @"Unknown Error";

    UIAlertView *alert = [[UIAlertView alloc]

                          initWithTitle:@"Error getting Location"

                          message:errorType

                          delegate:nil

                          cancelButtonTitle:@"Okay"

                          otherButtonTitles:nil];

    [alert show];

    [alert release];

}


附一张截图:
iPhone入门学习汇总_第3张图片

编辑本段 回目录CoreLocation定位学习笔记

一.基本知识

iPhone可以使用CoreLocation框架确定他的物理位置,可以利用三种技术来实现该功能:GPS,WiFi定位和蜂窝基站三角网定位。但在程序中我们只需设定我们希望的精度级别,由CoreLocation决定采用哪种技术可以更好的满足我们的请求。

二.具体介绍

1.位置管理器

CLLocationManager *locationManager = [[CLLocationManager alloc] init];//创建位置管理器

locationManager.delegate=self;//设置代理

locationManager.desiredAccuracy=kCLLocationAccuracyBest;//指定需要的精度级别

locationManager.distanceFilter=1000.0f;//设置距离筛选器

[locationManager startUpdatingLocation];//启动位置管理器

2.位置管理器代理

主要的代理方法有两个

//确定当前位置和位置更新了时调用这个方法

- (void)locationManager:(CLLocationManager *)manager

didUpdateToLocation:(CLLocation *)newLocation

   fromLocation:(CLLocation *)oldLocation

{

NSString *latitudeString=[[NSString alloc] initWithFormat:@"%g",newLocation.coordinate.latitude];

//latitudeLabel.text=latitudeString;

[latitudeString release];

NSString *longitudeString=[[NSString alloc] initWithFormat:@"%g",newLocation.coordinate.longitude];

//longitudeLabel.text=longitudeString;

[longitudeString release];

}
//位置查询遇到错误时调用这个方法

 (void)locationManager:(CLLocationManager *)manager

  didFailWithError:(NSError *)error

{

NSString *errorType = (error.code == kCLErrorDenied) ?

   @"Access Denied" : @"Unknown Error";

   UIAlertView *alert = [[UIAlertView alloc]

                         initWithTitle:@"Error getting Location"

                          message:errorType

                          delegate:nil

                          cancelButtonTitle:@"Okay"

                          otherButtonTitles:nil];

    [alert show];

    [alert release];

}

编辑本段 回目录Mac入门学习笔记

一.相关常用网址

软件下载类: http://www.macx.cn/ http://www.chinamac.com/ 开发类: http://www.cocoachina.com/今天只看了这几个,苹果官方的网址等还都没仔细看,随着使用的增加,以后会用到更多和Mac相关的网址的。

二.常用软件下载地址: 搜狗中文输入法: http://www.sinomac.com/modules/mydownloads/index.php QQ:http://im.qq.com/qq/mac/ 包含大部分软件:http://www.chinamac.com/macsoft/ http://www.macx.cn/按需下载:我的设想是下载virtualBox虚拟机,然后安装widows系统,在windwos下开迅雷快速下载需要的资源,并且一般的需要文字编辑等的也喜欢在windows下完成。

三.常用快捷键 注:针对标准windows键盘,非苹果键盘win对应苹果的command键 
1.带Win键(即苹果键)的常用操作快捷键 
win+x:剪切 
win+c:复制 
win+v:粘贴 
win+F:查找 
win+Z:还原一步 
win+A:全选 
win+s:保存 
Win+shift+s另存为

注:这些常用的文件操作快捷键和Windows下的类似,只需把ctrl换成win键 
win+w:关闭窗口(相当于Windows下的Alt+F4) 
win+Tab:程序间切换(相当于Windows下的Alt+Tab) 
win+m:最小化当前窗口 
win+h:隐藏当前窗口或者软件 
win+q:推出当前程序 
shift+win+q : 登出用户 
注:下面是和各个界面选择相关的快捷键 F9:显示所有程序打开的窗口 F10:显示当前打开的窗口 F11:隐藏所有窗口并显示桌面(终于找到了,类似windows下的win+D) 
注:下面是文件及程序编辑是比较相关的快捷键 Home:移动文件的开头 END:移动文件的结尾 win+<-:移动到行首(类似Windows下的home) win+->:移动到行尾(类似Windows下的end) Shift-Home:选择到文件开头 Shift-End:选择到文件结尾 Shift-win-←:选择到行首 Shift-win-→:选择到行尾 
附: 上面列出了可能用到比较多的快捷键, 更具体的可以查看下面网址 http://sheji.us/blog/article.asp?id=96 http://bbs.weiphone.com/read.php?tid=653 快捷键很多,不需要记全 如果需要频繁使用某个操作,可以在这个操作的菜单栏后面查看这个操作的快捷键 如TextEdit的File下的new win(显示为苹果的花键)N,表示win+N就可以新建。

四.一些基本设置 
1.输入法切换设置: system prefenrence->keyboard&mouse->勾选Input Menu选项,去掉spotlight前的勾,之后输入法的切换就是win+space 
2.浏览器设置: Safari->preference->标签->确认第一项勾选->然后在打开新网页链接的同时按住win就可以在当前窗口的新标签页中打开

五.系统下的文件夹及部分自带常用软件功能介绍 
1.Application文件夹下部分图标的功能: 
(1)expose功能的使用 F9显示所有打开的界面 F10显示打开的应用程序 F11隐藏打开的所有界面 熟练使用这三个快捷键可以快速切换同一个桌面上的不同界面 
(2)space功能的使用 space的功能相当于虚拟出4个桌面,这样就可以把不同的应用放在不同的桌面上,比如网页查询资料的safari和工作工作交流的QQ放在第一个桌面,对本地电脑上资料的查找打开和编辑等放在第二个桌面,程序开发所用的软件放在第三个桌面,第四个桌面留给虚拟机 打开的其他程序。其实这个功能ubuntu下也有,那里是右下角工具栏处直接有可以在不同的桌面间切换的标志。 
快捷键为F8 2.utilities文件夹下部分图标的功能: 
(1)使用activityMonitor查看系统进程(类似windows的资源管理器)可以对系统的运行可以有全面的了解,包括当前运行的进程名,CPU和内存的使用率等,选定某一个进程名,双击后,可以查看当前进程的更详细的信息,其中用到最多的可能是推出或强制推出某一个卡死的进程。 (2)磁盘工具对磁盘进行操作 这个自带的磁盘工具可以对硬盘分区进行操作,包括设置分区格式和格式化某个分区等,在安装Mac系统时,应该选择Mac OS扩展(日志式)宗卷格式,除了适合Mac的格式外,就只有FAT格式了。 
(3)系统概述里提供了系统的详细信息 在这里可以很好的了解系统的一些硬件及系统带的框架,字体,安装的应用程序等信息。 
(4)终端的使用 当需要使用命令行方式时,就要用到这个终端,如果用过linux下的终端,对这个会比较熟悉,一些常用的删除,复制等操作也都可以通过在终端下输入命令的方式实现。

编辑本段 回目录iPhone静态库学习笔记

一.基本知识

在实际的编程过程中,通常会把一些公用函数制成函数库,供其它程序使用,一则提搞了代码的复用;二则提搞了核心技术的保密程度。所以在实际的项目开发中,经常会使用到函数库,函数库分为静态库和动态库两种。和多数人所熟悉的动态语言和静态语言一样,这里的所谓静态和动态是相对编译期和运行期的:静态库在程序编译时会被链接到目标代码中,程序运行时将不再需要改静态库;而动态库在程序编译时并不会被链接到目标代码中,只是在程序运行时才被载入,因为在程序运行期间还需要动态库的存在。

对iPhone平台来说,iPhone官方只支持静态库联编,因此下面就介绍下iPhone中静态库的用法。

二.iPhone静态库使用

1.创建静态库

打开XCode新建一个项目,选择Library下的“Cocoa Touch Static Library”,在Classes文件夹上点右键选择“New File…”,然后在“Cocoa Touch Class”下选择“Objective-C class”,这样就可以创建Objective-C风格的源文件和头文件。

同样,也可以创建C或者C++风格的代码,在Classes文件夹上点右键,选择“New File…”,这次选择Mac OS X下的“C and C++”,就行。

然后在文件里编写具体的调用代码。

最后进行编译,就会产生一个以.a为结尾的文件,就是我们需要的静态库。同时我们也需要生成的.h头文件。

2.使用静态库

在需要调用静态库的工程的目录下通过右键点Frameworks->Add->Existing Files..添加之前创建的.a静态库文件,然后在需要调用静态库的函数的.h文件里,import进来和静态库中.m对应的.h头文件,并且声明静态库里的类:@class 类名,这样就可以使用静态库里的函数了。

3.联调静态库

如果单单以copy的方式包含进.a静态库,这样只能使用静态库,如果需要修改静态库里的函数,则需重新生成静态库,并将其重新包含进来,在开发阶段会显得比较麻烦。可以采用Xcode的Cross-Project Reference(跨项目参考)的方式解决。

首先把静态库的XCode项目整个包含进我们的当前项目(注意:不要选择Copy items to destination group's folder选项)。

接着和第二步一样也是包含进.a静态库(也要注意:不要选择Copy items to destination group's folder选项)。

这样就可以从我们当前的项目里直接打开静态库的项目,直接修改(注意:修改后编译前必须选择clean,清除原有的静态库,重新生成)。

附:参考链接

深入理解iPhone静态库:

http://blog.csdn.net/dongfengsun/archive/2009/11/20/4840224.aspx

IPhone项目使用静态库的最佳方法:

http://www.iphone-geek.cn/编程/iphone项目使用静态库的最佳方法


附件列表

下载次数:748 (574.52k)  HelloLocation.zip
下载次数:359 (603.62k)  HelloPageCurl.zip

你可能感兴趣的:(iPhone入门学习汇总)