第1章 ObjectiveC语言概述_第1页
第1章 ObjectiveC语言概述_第2页
第1章 ObjectiveC语言概述_第3页
第1章 ObjectiveC语言概述_第4页
第1章 ObjectiveC语言概述_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章Objective-C语言概述MACOSXMACOSX是苹果公司为Mac系列产品开发的专属操作系统是PC机系统,非移动设备的操作系统以UNIX为基础,既简单易用又功能强大MACOS版本OSX版本以大型猫科动物命名:10.0猎豹(Cheetah)10.2美洲豹(Puma)10.2美洲虎(Jaguar)10.3黑豹(Panther)10.4老虎(Tiger)10.5豹子(Leopard)10.6雪豹(SnowLeopard)10.7狮子(Lion)10.8美洲狮(Mountain

Lion)

(Xcode4.5)iOS框架介绍iOS是指运行于iPhone、iPad和iPodtouch上的操作系统及其相关技术的统称。在操作系统层面上,iOS是用于管理上述移动设备的操作系统。史蒂夫·乔布斯(SteveJobs)在2010年6月7日的WWDC全球开发者大会上宣布将iPhoneOS改名为iOS。Objective-C语言Objective-C是一种面向对象的语言1988年NeXT公司购买了Objective-C的版权1996年苹果收购了NeXT,将NeXTSTEP重命名为Cocoa。所以Coacoa中的很多类名都是以NS开头Objective-C是进行iPhone软件开发的语言Objective-C语言是C语言的一个扩展集,完全兼容C语言Objective-C语言大小写敏感程序语句必须以(;)结束在MAC操作系统的Terminal(应用程序终端)中,可以使用gcc命令编译和连接OC程序gcc–frameworkFoundationfiles–oprogname开发工具(Xcode)XCODE苹果软件的开发需要在苹果电脑环境下进行,集成开发环境为XCODE。MAC系统有中文版本,但是XCODE没有中文开发版本MAC系统不同,所支持的XCODE版本不同,请看好类型后再下载。XCODE的下在需要注册苹果开发者账号:/programs/ios/使用真机进行模拟需要加入苹果开发者计划XCODEHelloWorld——UI界面HelloWorld——UI界面HelloWorld——UI界面12Xcode界面iOS应用程序开发方法与实践HelloWorld——UI界面InterfaceBuild设计界面模拟器HelloWorld__命令行程序HelloWorld__命令行程序HelloWorld__命令行程序HelloWorld__命令行程序删除程序OrganizerProjects选中项目删除项目文件的组织结构不同的扩展名表示了文件的不同作用。.h:头文件。.c:C源代码文件。.cc或.cpp:C++源代码文件。.m:Objective-C源代码文件。.mm:Objective-c、C和c++代码混用的文件。.o:编译后的文件.pch:预编译头文件,用于加快处理头文件的速度。.xib:界面定义文件。.plist:属性列表文件。Cocoa框架Cocoa是苹果公司的面向对象的库,该环境下的任何类都要继承自NSObject(根类)Cocoa的主要开发语言是Objective-CCocoa包含两个核心框架:Foundation框架和Appkit框架CocoaTouch包含两个框架:Foundation框架和UIKit框架注:NS:NeXTSTEP开发工具XcodeIntefaceBuilderXcode:是苹果公司的集成开发环境的发动机,它负责绝大多数的开发工作

IntefaceBuilder:它是一个用于创建用户界面的图形工具

iphone模拟器:当临时查看效果时,可以很方便地使用模拟器进行查看在开发中,Xcode与IntefaceBuilder是紧密结合的iphone模拟器编译并运行项目在下拉菜单中指定程序是在哪个设备或者模拟器里运行。按下Run按钮,或者快捷键⌘R。OSX菜单中的修饰键符号⌘:Command键⌃:控制代码(ctrl键)⌥:Option键(Alt键)⇧:Shift键⇪:大写字母锁定Fn:功能键使用IB丰富程序界面InterfaceBuilder是iOSSDK提供的界面设计工具所见即所得通过图形化拖拽的方式进行设计界面信息与程序代码分离使用IB丰富程序界面界面信息存储在nib文件中xib文件是一个XML文件,保存对象类型与界面信息等xib文件会被编译为二进制形式的nib文件不管是xib文件还是nib文件,苹果的官方说法都称其为nib文件在对象库窗口中选中控件,并将其拖拽至设计器中还可以设置对象类型、属性、位置、尺寸、关联、设置字体和颜色等信息1.5.6在iOS设备上运行程序加入iOS开发人员计划并安装证书与描述文件在下拉菜单中选择指定的设备编译运行iOS模拟器iOS模拟器用于对程序进行初步的测试与调试模拟器允许进行以下操作:进行各种触屏操作方位旋转特殊情况模拟,如内存不足切换设备类型与版本模拟器具有局限性,不能替代真实设备一定要在iOS设备上对程序进行全面测试

代码混用obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码,处理mm文件可以识别obj-c、c、c++代码cpp文件必须只能用c/c++代码,cpp文件include的头文件中,不能出现obj-c的代码混用:如果模块以类实现,那么要按照cppclass的标准写类的定义,头文件中不能出现obj-c的内容如果模块以函数实现,那么头文件要按c的格式声明函数总结:只要cpp文件和cppinclude的文件中不包含obj-c的东西就可以用了,cpp混用obj-c的关键是使用接口,而不能直接使用实现代码,实际上cpp混用的是obj-c编译后的o文件第一个MACcommandline程序(xcode4.3前版本)#import<Foundation/Foundation.h>intmain(intargc,const

char*argv[]){

NSAutoreleasePool*pool=[[NSAutoreleasePoolalloc]init];

NSLog(@"Hello,iphone!"); [pooldrain];

return0;}第一个MACcommandline程序(xcode4.3前版本)#import<Foundation/Foundation.h>intmain(intargc,const

char*argv[]){

@autoreleasepool{

NSLog(@"Hello,iphone!");

}

return0;}第一个MACcommandline程序#import<Foundation/Foundation.h>告诉编译器导入Foundation框架中的Foundation.h主头文件OC中也可以使用#include来实现这个目的在C语言中程序员通常使用#ifdef命令的方案避免一个文件包含另一个文件#import可保证头文件只被包含一次,而不论此命令实际上在哪个文件中出现了多少次使用尖括号表示在系统文件目录中去查找,使用双引号表示在源文件目录去查找,若未找到将到系统头文件目录中去查找。Foundation.h为所有程序开发奠定基础的框架称为Foundation支持一些基本对象:数字、字符创、数组、字典、集合<Foundation/Foundation.h>:<框架名/文件名>在Xcode中选中该行command键+鼠标左击查看Foundation.h所在路径帮助的使用使用XCode开发程序,可以通过Xcode的Help菜单中的Documentation窗口访问文档帮助的使用帮助的使用main函数格式:intmain(intargc,constchar*argv[])每一个程序有且只有一个main函数argc是命令行总的参数个数argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数是命令行后面跟的用户输入的参数表示程序将在何处开始执行。return0;0:程序正常非0:通常表示出现了一些问题(如:很可能无法找到程序所需的文件)注解单行注释:使用连续的斜杠(//)多行注释:使用/*开头,*/结尾不能嵌套使用好处:比较清晰的指出该断程序用意有利于团队合作,有利于后期的代码维护内存管理NSAutoreleasePool*pool=[[NSAutoreleasePool

alloc]init];可以理解为在内存中开辟了一块共用的内存空间当向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池。因此自动释放池定义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。释放共用的内存空间[pooldrain];NSLog函数NSLog是Objective-C库中的一个函数作用:向控制台输出文本内容类似于C语言的printf附带显示内容:执行的时间、程序名等等NSString对象@符号在位于一对双引号的字符串前面例:该程序输出什么内容?#import<Foundation/Foundation.h>intmain(intargc,const

char*argv[]){@autoreleasepool{

NSLog(@"\nTesting...\n..1\n...2\n....3"); }

return0;}转义字符及其作用字符形式含义\”双引号\’单引号\n换行\t水平制表符\\反斜线例:输出加法结果#import<Foundation/Foundation.h>intmain(intargc,const

char*argv[]){@autoreleasepool{intsum; sum=50+20;

NSLog(@"%i",sum);}

return0;}格式化输出字符字符形式类型%i、%dint%cchar%f(用来输出实数,以小数形式输出)、%g(根据大小自动选f格式或e格式,且不输出无意义的零)、%e(指数形式)float%lx十六进制无符号数%@对象%pid类接口(@interface)类接口的实现代码:@interface类名:父类名{变量定义; //不能写函数}方法定义;@end类接口(@interface)@interfaceMember:NSObject{ NSSting*Name; Intage;}-(NSString*)name;-(int)age;-(void)setName:(NSString*)input;-(void)setAge:(int)input;@end@interface符号表明这是Member类的接口声明,冒号后面指定了父类方法前面的-表明它是一个实例方法;如果是+就是一个类方法,表明其他代码可以直接调用类方法,而不用创建这个类的实例方法的签名是返回值的类型,方法的可以指定输入参数的信息后面,在方法名与参数之间通过:隔开类实现(@implementation)类实现的语法:@implementation类名 方法实现代码;@end类实现(@implementation)@implementationMember-(NSString*)name{ returnname;}-(int)age{ returnage;}-(void)setName:(NSString*)input{ [nameautorelease]; name=[inputretain];}-(void)setAge:(int)input{ age=input;}@end应用对象的两种方法:release:

会直接删除引用,如果没有其他对象引用该对象了,相应的内存被释放autorelease:

在将来的某个时刻释放应用程序intmain(intargc,constchar*argv[]{ @autoreleasepool{

Member*member=[[Memberalloc]init]; [membersetName:@”sam”]; [membersetAge:36]; NSLog(@”%@”,[membername]); NSLog(@”%i”,[memberage]); [memberrelease]; } return0;}所有的Objective-C对象都是指针类型的应用程序运行到[memberrelease];这行会报错修改:应用程序对象声明的语法:类名*var1,*var2,…;定义了一个指针变量,尚未获得内存空间调用alloc,才能获得(分配)空间例如:Member*member;member=[Memberalloc];除了分配空间还需要调用init方法给对象设置初始值方法调用方法调用的格式(也叫消息表达式)[实例方法:参数1:参数2];[类名方法名];可以把返回的值放在变量上保存变量=[实例方法];OC允许在一个方法调用中嵌套另一个方法[NSStringstringWithFormat:[testformat]];尽量避免在一行代码中嵌套调用两个以上的方法特殊用法:self类似Java的this使用self可以调用本类中的方法,例-BOOLisQualified{ return([selfage]>21);}标识符标识符可以是大写字母、小写字母、数字、下划线的任意顺序组合,但不能以一个数字开始合法变量例子membera4flagType不合法的变量名例子#member3aflag-typeis/it/ok变量不允许连续赋值,例如a=b=c=5OC关键字、预定义的标识符参考书本20-21页指令符@指令符@数据类型整形:int,shortint或short,longint或long,unsignedint或unsigned,unsignedshort,unsignedlong实型:float,double,longdouble小数形式指数形式字符型:char常量只能用单引号括起来数字被定义为字符型后不能参与数值运算字符串:NSString常量由@和“”的字符序列NSString不是一个简单数据类型,而是一个对象数据类型__id类型类似Java的Object类,可以转化为任何数据类型id类型的变量可以存放任何数据类型的对象idanObject;-(id)newObject:(int)type;id在objc.h中的定义:typedefstructobjc_object{Classisa;}*id;id是指向structobjc_object的一个指针id是一个指针,所以在使用id的时候不需要加星号例如:idfoo=nil;//定义了一个nil指针,指向NSObject的任意一个子类id*foo=nil;//定义了一个指向指针的指针id取代了int类型成为默认的数据类型数据类型__id类型例:学生类头文件Student.h的代码如下@property:表示声明了对象的属性#import

<Foundation/Foundation.h>

@interface

Student

:

NSObject

{

int

sid;

NSString

*name;

}

@property

int

sid;

@property

(nonatomic,retain)

NSString

*name;

-

(void)

print;

-

(void)

setSid:

(int)

sid

andName:

(NSString*)

name;

@end

数据类型__id类型学生类实现文件Student.m的代码如下:@synthesize:表示“创建该属性的访问器”#import

"Student.h"

@implementation

Student

@synthesize

sid,name;

-

(void)

print{

NSLog

(@"我的学号是:%i,我的名字是:%@",sid,name)

;

}

-

(void)

setSid:

(int)

sid1

andName:

(NSString*)

name1{

self.sid

=

sid1;

=

name1;

}

@end

数据类型__id类型成员类头文件Member.h的代码如下:#import<Foundation/Foundation.h>@interfaceMember:NSObject{NSString*name;intage;}@property(nonatomic,retain)NSString*name;@propertyintage;-(void)print;-(void)setName:(NSString*)name1andAge:(int)age1;@end数据类型__id类型成员类实现文件Member.m的代码如下:#import"Member.h"@implementationMember

@synthesizename,age;-(void)print{NSLog(@"我的名字是:%@,我的年龄是%i",name,age);}-(void)setName:(NSString*)name1andAge:(int)age1{=name1;self.age=age1;}@end数据类型__id类型#import<Foundation/Foundation.h>#import"Member.h"#import"Student.h“intmain(intargc,constchar*argv[]){@autoreleasepool{Member*member1=[[Memberalloc]init];[member1setName:@"Sam"andAge:36];

iddata;

data=member1;

[dataprint];Student*student1=[[Studentalloc]init];[student1setSid:1122334455andName:@"Lee"];

data=student1;

[dataprint];[student1release];[member1release];}return0;}Objective-C的其他数据类型BOOL在objc.h中,BOOL定义为typedefsignedcharBOOL;#defineYES(BOOL)1#defineNO(BOOL)0Objective-C的其他数据类型SEL类似与C语言中的函数指针选择器就是指向方法的一个指针定义方法:SEL变量名=

@selector(方法名字);例如:-(void)setName:(NSString*)nameage:

(int)age;SELsel=@selector(setName:age:);Objective-C的其他数据类型SELrespondsToSelector方法:判断该对象是否存在对应的方法performSelector:withObject:方法:调用选择器SEL

sel

=

@selector

(start:)

;

//

指定action

if

([obj

respondsToSelector:sel])

{

//判断该对象是否有相应的方法

[obj

performSelector:sel

withObject:self];

//调用选择器方法

}

Objective-C的其他数据类型SELperformSelector:[selfperformSelector:@selector(noParam)withObject:nil];[selfperformSelector:@selector(oneParam:)withObject:oneParam];[selfperformSelector:@selector(oneParam:twoParam:)withObject:oneParamwithObject:twoParam];最多支持两个参数,参数必须是对象,可以用指针表示Objective-C的其他数据类型#import<Foundation/Foundation.h>@interfaceClassA:NSObject{}-(void)print;@end@implementationClassA-(void)print{ NSLog(@"I'mClassA.");}@endintmain(intargc,constchar*argv[]){@autoreleasepool{SELsel=@selector(print);ClassA*classA=[[ClassAalloc]init];[classAperformSelector:selwithObject:n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论