ios基础OC语言.docx
《ios基础OC语言.docx》由会员分享,可在线阅读,更多相关《ios基础OC语言.docx(39页珍藏版)》请在冰豆网上搜索。
ios基础OC语言
1介绍2
1.1简介2
1.2OC简介3
1.2.1介绍3
1.2.2OC特性3
1.2.3OC语言的特点4
1.3maxOS介绍(补充)4
1.4IOS的生态系统5
1.5IOS架构5
1.5.1CoreOS5
1.5.2CoreServices6
1.5.3Media7
1.5.4CocoaTouch8
1.6IOS与macOS9
1.7开发环境介绍9
2MVC模式10
2.1目的10
2.2介绍10
2.3模型(Model)10
2.4视图(View)11
2.5控制器(controller)11
2.6变更-传播机制12
3类12
3.1源代码文件扩展名对比12
3.2类的定义13
3.3实例变量和属性14
3.3.1实例变量14
3.3.2属性14
3.4类的方法声明和消息发送15
3.4.1方法声明15
3.4.2方法定义16
3.4.3方法调用16
3.4.4带参方法16
3.4.5补充(课件)16
3.5类的实现17
3.6实例化对象18
4OC的语法20
4.1数据类型20
4.1.1通用数据类型(与c语言通用)20
4.1.2特有数据类型20
4.1.3Cocoa类型20
4.2变量和常量21
4.2.1变量21
4.2.2常量21
4.3标识符21
4.3.1用户标识符21
4.3.2关键字22
4.3.3预定义标识符22
4.4运算符22
4.5属性和nil空对象23
4.6self与super23
4.7异常处理23
4.8程序控制结构24
4.8.1顺序结构24
4.8.2选择结构24
4.8.3循环结构24
4.9继承与多态24
4.9.1继承24
4.9.2多态25
4.10分类与协议25
4.10.1分类25
4.10.2协议26
4.11补充27
5Cocoa基础29
5.1Foundation框架29
5.1.1介绍29
5.1.2结构29
5.1.3根类33
5.1.4基本数据类型33
5.1.5值对象(valueObject)33
5.1.6字符串(String)35
5.1.7集合(Collections)40
5.2Uikit框架48
1介绍
1.1简介
IOS主要用于iPhone、iPod、iPad、iTouch和appleTV。
1976年,apple成立。
SteveWozniak(史提夫.沃兹尼克),SteveJobs(史提夫.贾伯斯)创办。
1980年OC问世。
objective-c(面向对象的C语言):
难点:
内存管理和设计模式(代理设计模式)。
OC是IOS开发的基础课,是C语言的超集,C语言和OC是完全兼容的。
1.2OC简介
1.2.1介绍
C语言的发明人:
丹尼斯.里奇。
1980年BradCox发明OC,后来加入乔布斯的NEXTSTEP。
1988年推出NEXTSTEP开发环境,1992年,乔布斯的NEXTSTEP将OC转让给GNU(自由软件基金会)。
1996年OC成为MACOC开发语言,2007年OC2.0。
2007年IOS1,每年一个版本,2014年IOS8。
OC语言是一种简单的面向对象的编程语言,它的面向对象特性参考了SmallTalk-80语言。
跟C++是在同一时间段诞生的,没有借鉴C++。
用于嵌入式开发,网络服务器端开发。
1.2.2OC特性
OC是一种通用的面向对象的编程语言,它扩展了ANSIC编程语言,将SmallTalk式的消息传递机制加入到ANSIC中。
它是苹果的OSX(X表示第十代)和IOS操作系统,及其相关的API、Cocoa和CocoaTouch的主要编程语言。
1.2.3OC语言的特点
1 支持C语言语法,是ANSI-C的超集,是一个高效的编程语言。
2 支持C语言面向对象的扩展,支持完整的面向对象编程特性。
3 简洁而优雅的编程风格使得编写程序与阅读代码都变得格外清晰。
4 兼容性好,可以在同一个项目中同时使用OC与C++,也可以在项目中导入由C、C++等语言编写的库文件。
1.3maxOS介绍(补充)
对于苹果的操作系统,我们可以将其统称为MacOS,MacOS的首个版本于1984年发布,不过当时并不叫做MacOS,而是叫做Systemsoftware,比如System1.0、System1.1等。
直到1994年推出System7.5版本的时候,才引入了MacOS这个名字,逐渐弃用了System,到8.0时代就完全改为MacOS8.0。
后来又推出了8.1、8.5、8.6甚至9.x等多个版本。
MacOS9之后,2001年苹果推出了第10代MacOS操作系统——MacOSX,并从2002年起随Mac计算机发售,X这个字母是一个罗马数字且正式的发音为"十"(ten),接续了先前的Mac操作系统像是MacOS8和MacOS9的编号。
根据Wikipedia的解释,MacOSX是一套Unix基础的操作系统,包含两个主要的部份:
内核名为Darwin,是以FreeBSD源代码和Mach微内核为基础,由苹果公司和独立开发者社区协力开发;及一个由苹果计算机开发,名为Aqua之专有版权的图形用户界面。
MacOSX版本以大型猫科动物命名。
比它的推出更重要的,在苹果计算机内部10.0版本的代号是猎豹(Cheetah),以及10.1版本代号为美洲狮(Puma)。
在苹果的产品市场10.2版本命名为美洲虎(Jaguar),以及10.3相似地命名为黑豹(Panther)。
10.4版已经被命名为老虎(Tiger)。
10.5版花豹(Leopard)作为新操作系统已于2007年10月26日推出,10.6版雪豹(SnowLeopard)已于2009年8月28日推出。
1.4IOS的生态系统
IOS生态系统不仅仅是指产品,更重要的是指iPhone/iPad/iPod/Mac+iCloud+App整个系统,包括Siri(部分设备不支持)、FaceTime、Safari、GameCenter、地图、Passbook、电话、邮件。
苹果所有移动设备都使用自己的OS,且不能更换电池,不能插内存卡,数据线连电脑后只能通过自家软件iTunes进行文件的传输,只能使用经过苹果认可的软件,且软件也只能从AppStore下载,这就组成了一个封闭的生态圈。
1.5IOS架构
1.5.1CoreOS
是用FreeBSD和Mach所改写的Darwin,是开源、符合POSIX标准的一个Unix核心。
这一层包含或者说是提供了整个iPhoneOS的一些基础功能,比如:
硬件驱动,内存管理,程序管理,线程管理(POSIX),文件系统,网络(BSDSocket),以及标准输入输出等等,所有这些功能都会通过C语言的API来提供。
另外,值得一题的是,这一层最具有UNIX色彩,如果你需要把UNIX上所开发的程序移植到iPhone上,多半都会使用到CoreOS的API.
Core(核心)OS层的驱动也提供了硬件和系统框架之间的接口。
然而,由于安全的考虑,只有有限的系统框架类能访问内核和驱动。
1.5.2CoreServices
CoreServices在CoreOS基础上提供了更为丰富的功能,它包含了Foundation.Framework和CoreFoundation.Framework,之所以叫Foundation,就是因为它提供了一系列处理字串,排列,组合,日历,时间等等的基本功能。
Foundation是属于Objective-C的API,CoreFoundation是属于C的API。
另外Coreservices还提供了其他的功能,比如:
Security,CoreLocation,SQLLite,和AddressBook.其中Security是用来处理认证,密码管理,按安全性管理的;CoreLocation是用来处理GPS定位的;SQLLite是轻量级的数据库,而AddressBook则用来处理电话薄资料的。
1.5.3Media
如同其名,Media层提供了图片,音乐,影片等多媒体功能。
图像分为2D图像和3D图像,前者由Quartz2D来支持,后者则是用OpenGLES。
与音乐对应的模组是CoreAudio和OpenAL,MediaPlayer实现了影片的播放,而最后还提供了CoreAnimation来对强大动画的支持。
1.5.4CocoaTouch
最上面一层是CocoaTouch,它是Objective-C的API,其中最核心的部分是UIKit.Framework,应用程序界面上的各种组件,全是由它来提供呈现的,除此之外它还负责处理屏幕上的多点触摸事件,文字的输出,图片,网页的显示,相机或文件的存取,以及加速感应的部分等。
1.6IOS与macOS
1.7开发环境介绍
MACOS虚拟机。
MACOS操作系统。
开发工具:
Xcode。
下载地址:
。
苹果应用程序商店:
AppStore。
苹果软件所有的菜单都在最上面一行,当选中某个客户端或网页时,在上面一行就会显示相应的菜单。
选择Xcode菜单,点击偏好(Preferences)菜单,有几个选项比较重要,Locations中的CommandLineTools,选择Xcode的版本。
downloads里面出来可以下载命令行工具外,在组件(components)中还有IOS的模拟器(simulator),以及一些可以下载的文档。
TextEditing中Linenumbers显示行号。
Fonts&Colors中可以设置字体、字号和颜色。
Accounts,发布应用程序需要填写苹果开发人员账号。
还有一些版本管理的设置。
选择,CreateanewXcodeproject,弹出窗体,左边选择IOSX中的Application,再从右边中选择CommandLineTool,点击next,接着输入ProductName(项目名称),点击next,选择保存文件夹,选择Create。
在项目的根目录中有个.xcodeproj文件,是Xcode的项目文件,双击该文件Xcode就会默认打开相应的项目。
项目里面可以有多个文件夹,其中与项目同名的文件夹存放源程序代码。
2MVC模式
2.1目的
1 将人机交互从核心功能中分离出来
2 模型对用户来说是不可见的,用户只需要观察视图
3 用户与模型的交互通过控制器提供的安全方法来实现
2.2介绍
MVC(Model-View-Controller)将一个交互式应用程序分成3个组件:
模型,视图,控制器。
2.3模型(Model)
包含核心功能和数据(核心业务逻辑):
1 封装了内核功能和数据。
2 模型对于用户来说是不可见的(M与V独立)。
3 模型独立于特定输出表示或者输入方式(M与C独立)。
4 用户只能通过控制器操作模型(C是M与V之间的桥梁)。
l
2.4视图(View)
向用户显示信息:
1 不同的视图使用不同的方法呈现信息。
2 每个视图组件都有一个更新函数,这个函数被模型变更通知激活。
3 这个函数被激活(此时模型已经改变)后,将使得视图重新和模型一致。
4 在初始化阶段,视图向模型登记请求变更通知(表)。
¢从模型获得数据:
1 通过状态查询函数实现。
例如:
定时刷新。
l
2.5控制器(controller)
处理用户输入;
¢每个视图有一个相关的控制器组件(一一对应);
¢控制器组件接受事件,并翻译成输入;
1 事件如何发送到控制器由用户界面平台决定。
2 事件被翻译成为对模型或者视图的请求。
3 如果控制器的行为依赖于模型的状态,那么控制器也需要向模型登记请求变更通知。
4 例如:
用户点击按钮,按钮的事件响应函数将采取相应的措施处理用户要求。
¢用户仅仅通过控制器与系统交互;
¢
2.6变更-传播机制
变更-传播机制保证了模型和用户界面之间的一致性:
一个模型可对应多个视图,如果用户通过一个视图的控制器改变了模型中的数据,那么依赖于该数据的其他视图也应该反映出这样的变化,一旦模型的数据发生了变化,模型需要通知所有相关的视图做出相应的变化,维护数据的一致性。
3类
3.1源代码文件扩展名对比
.m文件中可以有OC和C语言源代码,.mm文件除了可以包含Objective-C和C代码以外还可以包含C++代码,仅在你的Objective-C代码中确实需要使用C++类或者特性的时候采用这么扩展名。
创建一个新文件,选择OSX下Cocoa(IOS下CocoaTouch)中Objective-Cclass模板,一个类就创建好了。
3.2类的定义
@interfaceSimpleClass:
NSobject//声明
@end
上述的代码定义了一个类,类名SimpleClass,继承自NSobject。
定义的方法属性放在上面两个@语句之间。
类的声明放在.h文件中,类的实现放在相应的源代码文件中,OC的话选择.m或者.mm。
每个实例变量和方法声明都以分号结尾。
3.3实例变量和属性
3.3.1实例变量
就是在类中声明的变量。
要想使用实例变量,就要对实例变量进行声明和定义,实例变量的声明、定义和变量的声明、定义是一样的,并且它的声明和定义也是在一起进行的。
一般在接口文件中对实例变量进行声明和定义。
语法如下:
typeVariable_list;
在OC中提供了访问限定符对实例变量的作用域进行控制,如下所示:
1 @public:
作用域不受限制。
2 @protected
3 @private
4 @package:
在所属类中是@public,但是在其他类中是@private
当实例变量声明和定义好后,就可以对其进行使用了,实例变量使用的语法
形式如下:
类对象名->实例变量
@interfaceSimpleClass:
NSobject{//声明
@publicintabc;
}
@end
3.3.2属性
可以使用@property定义属性,属性是用来代替声明存取方法的便捷方式。
属性不会在你的类声明中创建一个新的实例变量。
他们仅仅是定义方法访问已有的实例变量的速记方式而已。
暴露实例变量的类,可以使用属性记号代替getter和setter语法。
getter和setter方法由系统自动生成。
如果想同时手动设置getter和setter方法需要使用@synthesize.@synthesize通知编译器在没有setter和getter方法时,由编译器生成这两个方法。
也可以为getter和setter方法指定不同的名称:
@property(nonatomic,getter=getsth)NSString*something。
@interfacePerson:
NSObject//类的申明
@propertyNSString*firstName;//申明NSString类型的对象。
@propertyNSString*lastName;
@propertyNSNumber*yearOfBirth;//申明指针,对象
@propertyintyearOfBirth;//声明基础类型,值类型
@property(readonly)NSString*firstName;//只读的
@end
@property:
Objective-C语言关键词,与@synthesize配对使用。
功能:
让编译器自动编写一个与数据成员同名的方法声明来省去读写方法的声明。
如:
1、在头文件中:
@propertyintcount;
等效于在头文件中声明2个方法:
-(int)count;
-(void)setCount:
(int)newCount;
2、实现文件(.m)中
@synthesizecount;
等效于在实现文件(.m)中实现2个方法。
-(int)count
{
returncount;
}
-(void)setCount:
(int)newCount
{
count=newCount;
}
以上等效的函数部分由编译器自动帮开发者填充完成,简化了编码输入工作量。
属性是用.运算符访问,你完全可以用指针(->)去访问实例(成员)变量。
3.4类的方法声明和消息发送
3.4.1方法声明
要使用方法,就要对方法进行声明,方法的声明,要在接口文件中进行,其
语法形式如下:
-/+(方法的返回值类型)方法名;
减号方法(普通方法又称对象方法)申明
加号方法(类方法又称静态方法)申明:
类似于C++中的static方法
3.4.2方法定义
方法声明好以后,就要在实现文件中对声明的方法进行定义,其语法形式如
下:
-/+(方法的返回值类型)方法名;
3.4.3方法调用
方法的调用(消息发送),方法的类型不同使用的调用也不同:
1 对象方法调用形式如下:
[对象名方法名];
2 类方法的调用的语法形式如下:
[类名方法名];
3.4.4带参方法
带有参数的方法(上面是无参方法的声明、定义和调用)
1 带有一个参数
声明:
-/+(方法的返回值类型)方法名:
(参数类型)参数名;
定义:
-/+(方法的返回值类型)方法名:
(参数类型)参数名{语句;}
调用:
[对象名方法名:
参数]和[类名方法名:
参数]
2 带有多个参数
声明:
-/+(方法的返回值类型)方法名1:
(参数类型)参数名1方法名2:
(参数类型)参数名2......;
定义:
-/+(方法的返回值类型)方法名1:
(参数类型)参数名1方法名2:
(参数类型)参数名2......{语句;}
调用:
[对象名方法名1:
参数1方法名2:
参数2......];和[类名方法名1:
参数1方法名2:
参数2......];
3.4.5补充(课件)
方法声明包括方法类型标识符,返回值类型,一个或多个方法标识关键字,参数类型和名信息。
当你想调用一个方法,你传递消息到对应的对象。
这里消息就是方法标识符,以及传递给方法的参数信息。
发送给对象的所有消息都会动态分发,这样有利于实现Objective-C类的多态行为。
也就是说,如果子类定义了跟父类的具有相同标识符的方法,那么子类首先收到消息,然后可以有选择的把消息转发(也可以不转发)给他的父类。
消息被中括号([和])包括。
中括号中间,接收消息的对象在左边,消息(包括消息需要的任何参数)在右边。
例如,给myArray变量传递消息insertObject:
atIndex:
消息,你需要使用如下的语法:
为了避免声明过多的本地变量保存临时结果,Objective-C允许你使用嵌套消息。
每个嵌套消息的返回值可以作为其他消息的参数或者目标。
例如,你可以用任何获取这种值的消息来代替前面例子里面的任何变量。
所以,如果你有另外一个对象叫做myAppObject拥有方法,可以访问数组对象,以及插入对象到一个数组,你可以把前面的例子写成如下的样子:
3.5类的实现
头文件.h和代码文件.m可分别存放声明和实现。
当你需要在源代码中包含头文件的时候,你可以使用标准的include编译选项,但是Objective-C提供了更好的方法#import选项。
它和#include选项完全相同,只是它可以确保相同的文件只会被包含一次。
Objective-C的例子和文档都倾向于使用#import。
例如:
#import“XYZPerson.h”//导入头文件
@implementationXYZPerson
方法的实现。
@end
3.6实例化对象
声明并创建对象:
类名*对象;
其中,使用“*”,表示定义的对象是对类的一个引用,一般有两种方式对对象进行创建。
1 使用alloc:
和init:
方法(实例方法)
alloc:
方法实现的功能是为对象分配内存空间。
init:
方法实现的功能是为对象进行初始化。
alloc:
方法和init:
方法可以单独使用进行创建,也可以合在一起使用。
单独使用的语法形式如下:
对象名=[类名alloc];
对象名=[类名init];
合在一起使用的语法形式如下:
类名对象名=[[类名alloc]init];例如:
myClass*mc=[[myClassalloc]init];
2 使用new:
方法(类方法)
有时为了方便,可以将对象的声明和创建合在一起,其语法形式如下:
类名对象名=[类名new];
试验下,init的过程?
?
?
?
?
?
?
?
NSlog(@”Hello,World”);其中的NSlog就类似于C++中的cout<<“”。
@表示该字符串是OC类型的字符串。
不加的话表示是纯C语言的字符串也就是字符数组。
intmain(intargc,constchar*argv[]){
@autoreleasepool{
NSLog(@”你好!
”);
}
return0;
}
一行程序指令往往对应着多行cpu指令。
4OC的语法
4.1数据类型
4.1.1通用数据类型(与c语言通用)
1 整型:
int,short,long,unsignedint,unsignedshort,unsignedlong
%i:
表示整型;%o、%#o:
表示八进制数;%x、%#x:
表示十六进制数。
2 浮点型:
float,double,longdouble
%f:
表示浮点型数据;%e:
科学计数法。
3 字符型:
char
%c(占位符)。
4.1.2特有数据类型
1 id:
动态类型(弱类型)。
2 BOOL:
布尔型(0,1)(C中没有,C++中有)
3 enum:
枚举类型
4 SEL:
选择器类型
5 Class:
类的类型
6 Nil(nil):
空对象
7 指针类型*p(课件无)
4.1.3Cocoa类型
Cocoa是苹果公司为MacOSX所创建的原生面向对象的API(ApplicationProgrammingInterface,应用程序编程接口)。
Cocoa包括两个方面:
即运行环境方面和开发方面。
Cocoa是一整套集成的面对对象的软件模块(类),它允许开发人员快速创建稳定的功能完善的OSX和IOS应用程序。
这些类是可以重用和修改的软件构造模块;开发人员可以直接使用它们或者也可以根据他们自己的需求扩展这些类。
Cocoa的类满足几乎所有可以想像到的开发需求。
IOS中两个Cocoa核心子框架:
MACOS中是Foundation和Application(包含了程序与图形用户界面交互所需的代码