ios应用开发Objective-C语法快速参考

9158APP 0

大多数在其他平台上有一定开发经验的初学者看到XCode,第一印象就是跃跃欲试。看到Interface Builder 后,他们的第一印象是跃跃欲试。但当他们看到Objective-C 的语法时,他们的第一印象就改变了。成就让我望而却步。

如果你像我一样对苹果相关的开发感兴趣:Mac OS 。大约二十分钟,绝对不是无聊的时间,你会对Objective-C 有一点了解,至少看例子不会那么头疼。

但假设你有一些C++、C# 或Java 的基础知识,你至少可以看到C++、C# 或Java 的源代码并大致理解其中所说的内容。

本文不是一篇科学文章,希望您不要将其当作一篇科学文章来阅读。文章很松散,但相信你能看懂。

XCode、Objective-C 和Cocoa 到底在谈论什么?

答:三件事。

XCode:您可以将其视为开发环境,就像Visual Studio 或Netbeans 或SharpDevelop 一样。您可以将Interface Builder 视为一个单独的程序,它提供用于在Visual Studio 中绘制界面的功能。

Objective-C:这是一门语言,就像C++是一门语言、Java是一门语言、C#是一门语言、莺歌历史也是一门语言一样。

Cocoa:就是很多函数库,比如MFC、NET、Swing之类的。人们已经写了很多现成的东西,你只需要知道如何使用它们即可。

有些人很容易混淆Objective-C 和Cocoa,就像有些人会混淆c# 和.NET 一样。这两件事确实是两件不同的事情。

什么是Objective-C?

您可以将其视为语法略有不同的C 语言。尽管乍一看您可能会认为这是火星语,但它与您所知道的任何其他语言都不同。

首先,我们简单列出一些差异:

问题1:我在程序中看到很多减号、方括号和NS****。这些是什么?

1 个减号(或加号)

减号表示函数、方法或消息的开始,凡是你能想到的。

例如,在C# 中,方法可以写为: privatevoidhello(boolishello){//OOXX}

用Objective-C 编写的是-(void)hello:(BOOL)ishello{//OOXX}

很容易理解,对吧?

然而,Objective-C 中没有公有和私有的概念。你可以将一切视为公共的。

加号表示其他函数可以直接调用该类中的该函数,而无需创建该类的实例。

2 个方括号

方括号可以认为是如何调用你刚刚编写的方法,在Objective-C 中通常称为“消息”。

例如,在C# 中,您可以编写: this.hello(true);

在Objective-C 中,它会写成: [selfhello:YES];3NS****

老乔被赶出苹果后,自己创业的时候就创办了一家名为NextStep的公司。里面的全套开发包很受一些科学家的欢迎,现在Mac OS使用了NextStep函数库。

开发NextStep的人自恋地把函数库中的所有类都以NextStep的缩写开头,即NS****。比较常见的有:

NSLog

NSString

NSInteger

NSURL

NS图像

……

你会经常在一些教学中看到它的使用: NSLog(@'%d',myInt);

这句话主要用于控制台中的跟踪。您将在控制台中看到myInt 的值(在XCode 中运行时打开dbg 窗口可以看到它)。在其他开发环境中,我们可能更习惯使用MessageBox进行调试。

还可以看到一些类以其他名字开头,比如CF、CA、CG、UI等,比如

CFStringTokenizer 这是一个分词的东西

CALayer 代表Core Animation的层

CGPoint 代表一个点

UIImage 这个代表iPhone中的图片

CF指的是Core Foundation,CA指的是Core Animation,CG指的是Core Graphics,UI指的是iPhone的User Interface……还有很多,等你自己去发现。

#p#字幕#e#

问题2:#import 和@interface 等内容是什么意思?

1.#导入

您可以将其视为#include,同样的事情。但最好使用#import,记住这一点。

2.@interface等

例如,如果您在c# 中编写子捕获类的定义: publicclassKids:System{privatestringkidName="mykid";privatestringkidAge="15";privateboolisCaughtKid(){returntrue;}}

当然,上面的写法不一定是正确的,只是一个看语法的例子。

在Objective-C 中,你必须这样写:

首先写一个kids.h文件来定义这个类:

@interfaceKids:NSObject{

NSString*孩子名字;

NSString*kidAge;

}

-(BOOL)isCaughtKid:

@end编写另一个kids.m文件来实现:

#导入“kids.h”

@implementationKids

-(无效)初始化{

孩子名字=@“mykid”;

孩子年龄=@”15”;

}

-(BOOL)isCaughtKid:

{

返回是;

}

@end:这种写法不一定正确,主要是看语法。

问题3:如何向一个方法传递多个参数?

一个方法可以包含多个参数,但所有后续参数都必须命名。

多个参数怎么写

(方法的数据类型) 函数名称:(参数1 的数据类型) 参数1 的值的名称参数2 的名称:(参数2 的数据类型

) 参数2值的名称……;

例如一个方法的定义:

-(void)setKids:(NSString*)myOldestKidNamesecondKid:(NSString*)mySecondOldestKidNamethirdKid:(NSString*)myThirdOldestKidName;

实现该功能时:

-(void)setKids:(NSString*)myOldestKidNamesecondKid:(NSString*)mySecondOldestKidNamethirdKid:(NSString*)myThirdOldestKidName{

最年长的儿子=myOldestKidName;

第二个儿子=mySecondOldestKidName;

第三个儿子=myThirdOldestKidName;

调用时:

Kids*myKids=[[Kidsalloc]init];

[myKidssetKids:@“张大力” SecondKid:@“张二丽” ThirdKid:@“张小丽”];而如果用c#写这个方法的话,粗略的写法可能是

publicvoidsetKids(stringmyOldestKidName,stringmySecondOldestKidName,stringmyThirdOldestKidName)

{

……

调用时大概的写法可能是:

KidsmyKids=newKids();

myKids.setKids("张大力", "张二丽", "张小丽");理解?其实并不难理解。

基本上,如果你能理解下面代码的转换关系,你就理解了80% 的Objective-C 语法: [[[MyClassalloc]init:[foobar]]autorelease];

转换为C# 或Java 的语法为: MyClass.alloc().init(foo.bar()).autorelease();

其他一些事情

其实这些在本站之前的文章中已经提到过,所以我在这里详细解释一下。

1. 身份证号:

Objective-C 有一种特殊的数据类型,称为id。你可以把它想象成“随便”。

在Objective-C 中,一切都以指针的形式保存,你得到的是对象在内存中的位置。那么id就是当你知道位置但不知道里面有什么的时候怎么写。

2.同一个数组可以存储不同的对象:

例如,一个数组NSArray可以存储各种对象,比如这个数组:

myArray —-|

0:(浮点)234.33f

1:@“我是一个好人”

2:(NSImage *)

3:@“我真是个好人”

这是一个由4 个东西组成的数组。该数组包含一个浮点数、两个字符串和一张图片。

3.布尔,是,否:

您可以将YES 视为在C# 或Java 中代表true,将NO 视为false。事实上,YES是1,NO是0,BOOL本身就是一个char。

4. IBOutlet 和IBAction 是什么?你总能看到他们。

这两件事实际上在语法中并没有发挥很大的作用。如果你想在Interface Builder中看到这个控制对象,那么在定义的时候在它前面添加IBOutlet,就可以在IB中看到这个对象的outlet了。如果你想在Interface Builder、Action中控制一个对象执行某些任务,只需在方法前面添加(IBAction)即可。

而这两件事其实和虚无是一样的。

5. 无。

Objective-C中的NULL(空)是这样写的,表示空指针。

6.为什么是@“string”而不是“string”

在前面加上@符号,编译器在编译的时候会在程序中给你留一个位置,这样可以保证字符串不会丢失。不管怎样,记住,如果你想将某些字符串硬编码到程序中,你必须使用@“string”。如果忘记使用@,程序很可能会出错。

超州英雄纠正:

6.为什么是@“string”而不是“string”

“String”是一个C字符串,@"'是将C字符串转换为NSString的缩写。

仅当需要NSString 时才需要进行此转换,例如在NSLog 中。

在需要C字符串的地方,仍然使用“string”。

另外,@"'转换不支持中文,例如NSLog(@"String");肯定不会输出中文。

Objective-C 2.0

Objective-C 2.0是Leopard添加的新语言,实际上和原来的Objective-C是一样的。主要是增加了属性。具体内容我这里就不写了。你可以参考Allen Dang的这篇文章,说得很清楚了。

总结

现在我们来总结一下如何阅读Objective-C代码以及如何开始学习Objective-C。

1. 请记住,Objective-C 是C,而不是Martian。这个非常重要。

2. 请记住,仅仅因为你无法理解它并不意味着你思维迟钝。大多数人第一次看到Objective-C 代码时可能比你还慢。

3. 将其添加到您的收藏夹。如果你看不懂代码,请再看一遍这篇文章。

4. 文档非常重要。当你不明白在说什么时,先查看Cocoachina,然后阅读英文文档中的API 说明,尤其是当课程以NS 开头时。如果这不起作用,请转到Google 并将您要检查的方法直接粘贴到Google 中。您通常会发现很多人都在问同样的问题。当然,还有热心的雷锋可以帮忙解答。

5、你可以看hello world的例子,但不能一直看。如果你看太多,你真的会头晕。另外,一定要放弃Apple官方的Currency Converter货币换算示例。这个例子就是毒药。当你第一次学习它时,你看得越多,你就越困惑。

6. 学习一门语言最好的方法就是先使用它。就像学外语一样,当你会说的时候,你自然会读它。给自己设定一个简单的目标,比如制作一个简单的程序,然后一点一点解决问题。通过这种方式学习比仅仅看例子要快得多。

这是一篇初学者写的文章。希望对同样是初学者的你有一点帮助:)虽然只是一些粗浅的内容,但是对于你进入Objective-C的大门应该还是有一点帮助的。读懂这篇文章后,再回头看Cocoachina的其他文章,你会发现非常赏心悦目。记得每天都来。

另外,这个Objective-C参考资料也比较不错。如果您有兴趣,可以阅读。

#p#字幕#e#