ObjectiveC基础学习笔记.docx

上传人:b****5 文档编号:8005013 上传时间:2023-01-27 格式:DOCX 页数:55 大小:40.27KB
下载 相关 举报
ObjectiveC基础学习笔记.docx_第1页
第1页 / 共55页
ObjectiveC基础学习笔记.docx_第2页
第2页 / 共55页
ObjectiveC基础学习笔记.docx_第3页
第3页 / 共55页
ObjectiveC基础学习笔记.docx_第4页
第4页 / 共55页
ObjectiveC基础学习笔记.docx_第5页
第5页 / 共55页
点击查看更多>>
下载资源
资源描述

ObjectiveC基础学习笔记.docx

《ObjectiveC基础学习笔记.docx》由会员分享,可在线阅读,更多相关《ObjectiveC基础学习笔记.docx(55页珍藏版)》请在冰豆网上搜索。

ObjectiveC基础学习笔记.docx

ObjectiveC基础学习笔记

Objective-C基础教程笔记

一:

Objective-C入门

1、Cocoa的组成

苹果公司将Cocoa、Carbon、QuickTime和OpenGL等技术作为框架集提供

Cocoa组成部分有:

Foundation框架(有很多有用的,面向数据的低级类和数据结构)

ApplicationKit(也称AppKit)框架(包含了所有的用户接口和高级类,例如NS……),还有一个支持框架的套件,包括CoreAnimation和CoreImage。

2、NSLog相当于printf()

NSLog(@”helloObjective-C”);

//注意:

@是Objective-C在标准C语言基础上添加的特征之一,双引导的字符串前面有一个@,这表示引用的字符串应该作为Cocoa的NSString元素处理

NSLog(”are%dand%ddifferent?

%@”,5,5,boolString(areTheyDifferent));

//注意%@:

使用NSLog输出任何对象时,都会适用这个格式说明

3、BOOL使用8位存储,YES定义为1,NO定义为0,大于1不为YES,跟标准C不同。

若不小心将一个长度于1字节的整型赋值给BOOL,则只截取八位

Objective-C中1不等于1,绝对不要将BOOL值和YES比较

二:

面向对象的Objective-C

1、使用间接从本地读取文件的例子

#import

intmain(intargc,constchar*argv[])

{

if(argc==1){

NSLog(“youneedtoprovideafilename”);

return

(1);

}

FILE*wordFile=fopen(argv[1],”r”);

charword[100];

whiel(fgets(word,100,wordFile)){

//fget调用会保留分开每一行的换行符,我们不需要,把它置换为0,表示字符串的结束

word[strlen(word)-1]=’\0’;

NSLog(@”%sis%dcharacterslong”,word,strlen(word));

}

}

//运行./Word-Length-4/tmp/words.txt

若给了文件路径,那么argc会大于1,然后我们可以查询argv数组得到文件路径。

Arg[1]保存着用户提供的文件名,argv[0]保存着程序名。

在XCode中编译此程序需要在XCode文件列表中展开Executables,双击程序名,在Arguments区域中添加启动参数

2、id

id是一种泛型,用于表示任何类的对象,id实际上是一个指针,指向其中的某个结构

3、[]

例:

[shaprdraw];

第一项是对象名,其余部分是要执行的操作

3、Objective-C的OOP范例

1)@interface部分(一般作为.h单独书写,声明部分)

@interfaceCircle:

NSObject//说明这是为Circle的新类定义的接口

{

ShapeColorfillColor;

ShapeRectbounds;

}//括号内的是Circle对象需要的各种数据成员

-(void)setFilColor(ShapeColor)fillColor;//先行短线表明“这是新方法的声明”如果是“+”则表示是类方法也称工厂方法

-(void)setBounds(ShapeRect)bounds;

-(void)draw;

@end//circle

2)@implementation部分(一般为.m文件,实现部分)

@implementationCircle//@implementation是一个编译器指令,表明你将为某个类提供代码

-(void)setFillColor(ShapeColor)c//在这里如果继续使用参数名fillColor,就会隐藏fillColor实例变量,并且有警告

//我们已经定义了一个名为fillColor的实例变量,可以在该方法中引用该变量,如果使用相同的另一个变量,那么前一个会屏蔽

{

fillColor=c;

}

-(void)setBounds(ShapeRect)b

{

bounds=b;

}

-(void)draw

{

NSLog(“^.^”)

}

@end//Circle

可以在@implementation中定义那些在@interface中无相应声明的方法,可以把他们看做是私有方法,仅在类的实现中适用。

注:

Objective-C不存在真正的私有方法,从而禁止其他代码调用。

这是Objective-C动态本质的副作用。

4、中缀符(infixnatation)

方法的名称和及其参数都是合在一起的

例如:

一个参数:

[citclesetFillColor:

kRedColor];

两个参数:

[circlesetStringValue:

@“hellothere”color:

KBlueColor];

5、继承(X是一个Y,isa)

1)Objective-C不支持多继承,我们可以通过Objective-C的其他特性获取多继承的优点,例如分类和协议

2)继承中方法的定义

可以使用正文和一个虚(dummy)值都是可以的

3)方法调度

当代码发送消息时,Objective-C的方法调度将在当前分类中搜索相应的方法,如果找不到则在改对象的超类中进行查找

4)实例变量

6、复合(X有一个Y,has)

严格的讲,只有对象间的组合才叫做复合,诸如int、float、enum和struct等基本类型都认为是对象的一部分

7、init

-(id)init

{

if(self=[superinit])

{

//将[superinit]的结果赋给self是Objective-C的标准惯例,为了防止超类的初始化过程中返回的对象不同于原先创建的对象

//若要超类要完成所需的一次性初始化,需要调用[superinit],init方法返回的值描述了被初始化的对象

engine=[Enginenew];

tires[0]=[Tirenew];

tires[1]=[Tirenew];

tires[2]=[Tirenew];

tires[3]=[Tirenew];

}

return(self);

}//init

8、存取方法(accessormethod)

setter和getter

setter方法根据他所需要更改的属性的名称来命名,并加上set

getter方法根据其返回的属性的名称来命名,不要加get

三:

源文件组织

1、@class*和import*.h

@class创建一个类类前声明,告诉编译器:

相信我,以后你会知道这个到底是什么,但是现在,你只需知道这些

继承一个类的时候不能用@class,因为他们不是通过指针指向其他类,所以继承一个类时要用import*.h

四:

Xcode的使用

1、更改自动注释中的公司名

终端中:

defaultswritecom.apple.apple.XcodePBXCustomTemplateMarcroDefinitions

‘{“ORGANIZATIONNAME”=“iPhone_”;}’

没有任何输出结果

2、键盘符号

1)Mac键盘符号

2)Microsoft键盘和Mac键盘的对照

Alt->徽标键->Option

3、Xcode技巧

1)同步显示

有时候两个窗口中显示的内容并不是同步的,只有分别点击了它们,才能同步更新内容

2)首行缩进

选自,右键->Re-indentselection

Alt[和Alt]可以把选中的代码左移和右移

3)代码自动完成

Tab键可以按频率最高的填充完成词

Esc可以弹出提示列表(E表示枚举,f代表函数,#代表@define,m表示方法,C表示类)

Ctl+.在各选项中切换

Shift+Ctrl+.反向循环

Control+/在占位符之间切换

4)批量编辑

快照:

File->MakeSnapshot

查看快照:

File->Snapshot

一次改变文件中的相同字符:

选定,Edit->EditallinScope,更改的时候都会变

重构:

选定Edit->Refactor,弹出对话框,输入要改成的字符(选中Snaphot后可以看见改变)

5)键盘代替鼠标

■control-F:

Moveforward,totheright(sameastherightarrow).

■control-B:

Movebackwards,totheleft(sameastheleftarrow).

■control-P:

Movetothepreviousline(sameastheuparrow).

■control-N:

Movetothenextline(sameasthedownarrow).

■control-A:

Movetothebeginningofaline(sameastheascommand-leftarrow).

■control-E:

Movetotheendofaline(sameastheascommand-rightarrow).

■control-T:

Transpose(swap)thecharactersoneithersideofthecursor.

■control-D:

Deletethecharactertotherightofthecursor.

■control-K:

Kill(delete)therestoftheline.Thisishandyifyouwanttoredotheendofalineofcode.

■control-L:

Centertheinsertionpointinthewindow.Thisisgreatifyou’velostyourtextcursororwanttoquicklyscrollthewindowsotheinsertionpointisfrontandcenter.

6)任意搜索

在菜单栏上面搜索

7)快速打开

#import后的文件选中,File->OpenQuickly,Xcode就会打开文件。

若不选择,则会打开OpenQuickly对话框

8)打开文档

Option+双击

9)调试时看数据

鼠标放在上面一会就可以看到

五:

FoundationKit

1、一些有用的数据结构(结构体能减少过程中的开销)

1)NSRange//用来表示相关事物的范围

typedefstruct_NSRange{

unsignedintlocation;

unsignedintlength;

}NSRange;

例如“Objective-Cisacoollanguage”中,“cool”可以用location为17,length为4的范围来表示

有3种方式可以创建新的NSRange

第一种:

直接给字段赋值

NSRangerange;

range.location=17;

range.length=4;

第二种:

应用C语言的聚合结构赋值机制

NSRangerange={17,4};

第三种:

使用Cocoa提供的快捷函数NSMakeRange():

NSRangerange=NSMakeRange(17,4);

//使用NSMakeRange()的好处是可以在任何使用函数的地方使用他

//例如[anObjectflarbulateWithRange:

NSMakeRange(13,15)];

2)几何数据类型

typedefstruct_NSPoint{

floatx;

floaty;

}NSPoint;

typedefstruct_NSSize{

floatwidth;

floatheight;

}NSSize;

typedefstruct_NSRect{

NSPointorigin;

NSSizesize;

}NSRect;

//Cocoa也为我们提供了这些类型的快捷函数:

NSMakePoint()、NSMakeSize()和NSMakeRect()

2、字符串(NSString和NSMutableString)

A:

不可变的字符串(NSString)

1)创建不可变的字符串

函数:

+(id)stringWithFormat:

(NSString*)format,...;

使用方法:

NSString*height;

height=[NSStringstringWithFormat:

@"Yourheightis%dfeet,%dinches",5,11];

2)NSString类中的方法

①大小

函数:

-(unsignedint)length;

使用方法:

if([heightlength]>35){

NSLog(@"wow,you'rereallytall!

");

}

②比较

函数1:

-(BOOL)isEqualToString:

(NSString*)aString;

使用方法:

NSString*thing1=@"hello5";

NSString*thing2;

thing2=[NSStringstringWithFormat:

@"hello%d",5];

if([thing1isEqualToString:

thing2]){

NSLog(@"Theyarethesame!

");

}//应用这个函数,不能用“==”,“==”只能比较字符串的指针值

函数2:

-(NSComparisonResult)compare:

(NSString*)string;

其中

typedefenum_NSComparisonResult{

NSOrderedAscending=-1,

NSOrderedSame,

NSOrderedDescending

}NSComparisonResult;

使用方法:

[@"aardvark"compare:

@"zygote"]  returnNSOrderedAscending:

.

[@"zoinks"compare:

@"jinkies"]  returnNSOrderedDescending.And,

[@"fnord"compare:

@"fnord"]    returnNSOrderedSame.

不区分大小写的比较

函数:

-(NSComparisonResult)compare:

(NSString*)string 

      options:

(unsigned)mask;

options参数是一个位掩码,可以用位或运算符(|)来添加这些选项标记

一些常用的标记有

■NSCaseInsensitiveSearch:

不区分大小写

■NSLiteralSearch:

进行完全比较,区分大小写

■NSNumericSearch:

比较字符串的字符个数,而不是字符值,若没项,“100”会排在“99”前面(一定要加)

使用方法:

if([thing1compare:

thing2

options:

NSCaseInsensitiveSearch|NSNumericSearch]==NSOrderedSame){

NSLog(@"Theymatch!

");

}

③包含字符串判断

函数:

-(BOOL)hasPrefix:

(NSString*)aString;  //判断开头

-(BOOL)hasSuffix:

(NSString*)aString;  //判断结尾

-(NSRange)rangeOfString:

(NSString*)aString;//看字符串中是否包含其他字符串

使用方法:

NSString*filename=@"draft-chapter.pages";

if([fileNamehasPrefix:

@"draft"){

//thisisadraft

}

if([fileNamehasSuffix:

@".mov"){

//thisisamovie

}

NSRangerange;

range=[fileNamerangeOfString:

@"chapter"];

//返回range.start为6,range.length为7,若传递的参数在接受字符串中没有找到,那么range.start则等于NSNotFound

B]可变字符串(NSMutableString)

1]创建可变的字符串

方式1:

函数:

+(id)stringWithCapacity:

(unsigned)capacity;//这个容量只是给NSMutableString的一个建议

使用方法:

NSMutableString*string;

string=[NSMutableStringstringWithCapacity:

42];

方法2:

继承NSString中的方法

NSMutableString*string;

string=[NSMutableStringstringWithFormat:

@"jo%dy",2];

2]NSMutableString中的方法

函数:

-(void)appendString:

(NSString*)aString;

-(void)appendFormat:

(NSString*)format,...;

-(void)deleteCharactersInRange:

(NSRange)range;//配rangeOfString:

一起连用

使用方法:

NSMutableString*string;

string=[NSMutableStringstringWithCapacity:

50];

[stringappendString:

@"Hellothere"];

[stringappendFormat:

@"human%d!

",39];

NSMutableString*friends;

friends=[NSMutableStringstringWithCapacity:

50];

[friendsappendString:

@"JamesBethLynnJackEvan"];

NSRangejackRange;

jackRange=[friendsrangeOfString:

@"Jack"];

jackRange.length++;  //eatthespacethatfollows

[friendsdeleteCharactersInRange:

jackRange];

3、NSArray和NSMutableArray

A)NSArray(不可改变的数组,是一个Cocoa类,用来存储对象的有序列表)

NSArray的两个限制

首先:

它只能存储Objective-C的对象,而不能存储C语言中的基本数据类型,如:

int,float,enum,struct,或者是NSArray中的随机指针

然后:

不能存储nil

1)创建方法

通过类的方法arrayWithObjects:

创建一个新的NSArray

使用方法:

NSArray*array;

array=[NSArrayarrayWithObjects:

@"one",@"two",@"three",nil];  

//array是以nil结尾的,这是nil不能存储的原因

2)常用方法

-(unsigned)count;//获取数组包含的对象个数

-(id)objecAtIndex:

(unsignedint)index;//获取特定索引处的对象

-componentsSeparatedByString:

//切分NSArray

-componentsJoinedByString:

//合并NSString

使用方法:

inti;

for(i=0;i<[arraycount];i++){

NSLog(@"index%dhas%@.",i,[arrayobjectAtIndex:

i]);

}

NSString*string=@"oop:

ack:

bork:

greeble:

ponies";

NSArray*chunks=[stringcomponentsSeparatedByString:

@":

"];

string=[chunkscomponentsJoinedByString:

@":

-)"];

B)NSMutableArray(可变数组)

1)创建方法,通过类方法arrayWithCapacity创建

+(id)arrayWithCapacity:

(unsigned)numItems;

使用方法:

NSMutableArray*array;

array=[NSMutableArrayarrayWithCapacity:

17];

2)常用方法

-(void)addObject:

(id)anObject;

-(void)removeObjectAtIndex:

(unsigned)index;

使用方法:

for(i=0;i<4;i++){

Tire*tire=[Tirenew];

[

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 表格类模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1