rss· 导航· 设为首页· 加入收藏
当前位置: 火魔网 » 程序开发 » ObjC

Objective-C 快速教程 偶的修改版

话说 像大家一样 当年第一次见到Obejctive-C 就是因为想在iPhone平台上写点儿小东西

曾经有哥们这样评论认识苹果IDE的过程:

“大部分有一点其他平台开发基础的初学者看到XCode,第一感想是磨拳擦掌,看到Interface Builder之后,第一感想是跃跃欲试,而看到Objective-C的语法,第一感想就变成就望而却步了。”

这个 确实如此 Obejctive-C这个东西 第一眼看上去 确实很像很像火星文……满眼都是些减号啊 @啊啥的 反正是怎么看怎么不像是C……

但是吧 一本书看下来 感觉这东西和C/C++的区别也没有想象中的那么大 只不过是表现形式不太相同而已~

OK Let's go!

首先 搞明白啥是Xcode、Objective-C、Cocoa

所谓的Xcode捏 就是苹果提供的一个IDE 就像是windows下面的VS

Objective-C,一种基于C的面对象编程语言……用学术一点儿的语言讲啊……它是:拥有Smalltalk式语法的,ANSI-C的一个超集……说白了,也就是说它发展自ANSI-C。

Cocoa 至于这东西是啥 其实 就类似于C++里面的MFC 是一大堆类的集合 啥?不知道啥是MFC?KFC总知道吧……?

关于ObjC~~~~~

问题一:我在程序中看到大量的减号、中括号和NS****这种东西,他们是什么玩意儿? 1 减号(或者加号) 比如c中,一个方法的写法可能是:
private void hello(bool ishello) //OOXX
} 用Objective-C写出来就是
-(void) hello:(BOOL)ishello //OOXX
} 挺好懂的吧? 不过在Objective-C里面没有public和private的概念,你可以认为全是public。

所谓的减号 一般来说 可以理解成方法(函数)的开始标志

另外 还会见到一些加号开头的方法 这些东西 被称作“类方法” 也就是说 它们属于类 而不是类的实例,你不可以在实例中调用这个方法

例如,类的初始化函数就是个类方法。

2 中括号 中括号可以认为是如何调用你刚才写的这个方法,通常在Objective-C里说“消息”。
比如C#里你可以这么写:
this.hello(true); 在Objective-C里,就要写成:
[self hello:YES];

其实 这就是ObjC中方法(函数)的调用方法而已 别把它想象的太神秘咯

3 NS****
老乔当年被人挤兑出苹果,自立门户的时候做了个公司叫做NextStep,里面这一整套开发包很是让一些科学家们喜欢,而现在Mac OS用的就是NextStep这一套函数库。 这些开发NextStep的人们比较自恋地把函数库里面所有的类都用NextStep的缩写打头命名,也就是NS****了。比较常见的比如:
NSLog
NSString
NSInteger
NSURL
NSImage NSLog (@"%d",myInt);
你还可以看到其他名字打头的一些类,比如CF、CA、CG、UI等等,比如
CFStringTokenizer 这是个分词的东东
CALayer 这表示Core Animation的层
CGPoint 这表示一个点
UIImage 这表示iPhone里面的图片 CF说的是Core Foundation,CA说的是Core Animation,CG说的是Core Graphics,UI说的是iPhone的User Interface……还有很多别的,等你自己去发掘了。

问题二、#import、@interface这类玩意说的是什么?
1、#import

它和#include有啥区别呢??

如果大家在C/C++下面写过东西的话 应该都知道自定义头文件时要保证头文件只被饱含一次吧??

而在ObjC中就可以免掉这一步咯

因为啊 #import相当的智能 它将自动保证头文件只被饱含了一次

(其实 说它只能 道不如说C的不够完善……)

@interface

这个东西 是类声明的一部分 声明了类的接口部分

话说 这个类真的不好解释啊……真的想搞的话头 还是去仔细的看书吧……下面的部分仅供参考 因为它说的不足够明白啊……

比如你在c#中写一个抓孩子类的定义:
public class Kids : System private string kidName=”mykid”;
private string kidAge=“15”;
private bool isCaughtKid() return true; }
当然,上面的写法不一定对,就是个用于看语法的举例。 在Objective-C里就得这么写:
先写一个kids.h文件定义这个类:
@interface Kids: NSObject {
NSString *kidName;
NSString *kidAge; -(BOOL) isCaughtKid:;
@end 再写一个kids.m文件实现:
#import “kids.h”
@implementation Kids
-(void) init {
kidName=@”mykid”;
kidAge=@”15”; -(BOOL) isCaughtKid:{
return YES; @end 这个写法也不一定对,主要是看看语法就行了。-_-b

OKOK 现在 说一个比较容易让人搞不懂的东西——中缀符

这个小小的东西

是用作多个参数传递时增强可读性的 其实 它并不是必须的

所谓的中缀符,完全可以看成是对参数的一个解释

它的一般形式如下:

-(返回值类型)函数名:(参数1数据类型)参数1值的名

                                    :参数2名:(参数2数据类型)参数2值的名

不知……这个可否被理解??

其他的一些东西
其实这些本站之前的文章有所提及,这里再详细解释一下。
1、 id:
Objective-C有一种比较特殊的数据类型是id。你可以把它理解为“随便”。(id类型是一个引用类型,可以看做是指向任意类型对象的指针)
在Objective-C里,一切东西都是指针形式保存,你获取到的就是这个对象在内存的位置。那么id就是你知道这个位置,但是不知道里面是啥的时候的写法。 2、 同一个数组可以保存不同的对象:
比如一个数组NSArray,这种数组里面可以保存各种不同的对象,比如这个数组里:
myArray <—-|
                      0: (float) 234.33f
                      1: @”我是个好人”
                      2: (NSImage *)   (俺的美图)
                      3: @”我真的是好人” 这是一个由4个东西组成的数组,这个数组包括一个浮点数,两个字符串和一个图片。 3、BOOL,YES,NO:
你可以认为YES表示C#或者Java里的true,NO表示false。而实际上YES是1,NO是0,BOOL本身就是个char。 4、IBOutlet、IBAction是啥玩意,总能看到。
这两个东西其实在语法中没有太大的作用。如果你希望在Interface Builder中能看到这个控件对象,那么在定义的时候前面加上IBOutlet,在IB里就能看到这个对象的outlet,如果你希望在Interface Builder里控制某个对象执行某些动作,就在方法前面加上(IBAction)。 而这两个东西实际上和void是一样的。 5、nil。
Objective-C里的NULL(空)就这么写,表示空指针。 6、为什么是@”字符串”而不是”字符串”
前面加上@符号,编译器在编译的时候会在程序中给你留出位置,这样才能保证这个字符串不会丢失。反正记住,如果你要想把某些字符串写死在程序里,就要用@”字符串”,如果忘了用@,程序应该会出错。 superzhou大侠指正:
6、为什么是@”字符串”而不是”字符串”
”字符串”是C的字符串,@”"是把C的字符串转成NSString的一个简写.
在需要NSString的地方才需要这个转化,例如NSLog里面.
在需要C string的地方,还是用”字符串”的. 另外,@”"这个转换是不支持中文的.例如NSLog(@”字符串”); 是一定输出不了中文的.四、Objective-C 2.0
Objective-C 2.0是Leopard新增加的一门语言,其实和原来的Objective-C是一样的。主要是增加了属性。

属性这个东西 实质上就是让系统自动生成对实例变量的读写函数 让我们可以通过“.”来访问它们

声明形式为 @property (修饰) 类型 名字; 其中修饰有下面三种类型: 1 读写权限    readwrite 表示可读写    readonly 表示只读 2 赋值方法    assign 表示直接赋值    retain 表示对对象进行一次引用(增加引用计数,见上一章),保留对象的引用。    copy 表示拷贝创建一个新的对象。 3 原子操作修饰,这个修饰默认是atomic。主要用来进行多线程下的使用。    nonatomic 非原子操作属性 修饰可以同时使用多种,在括号中用逗号间隔。 定义形式根据需求不同分为两种。 一种是set/get形式,这种形式下,必须手动编写“set属性名称”和“属性名称”两个方法,实现set和get。这种方法的好处是可以定制赋值方法和其他操作。其中set中的属性名称首字母要大写。

另一种是直接同步。即只要在实现文件里使用 “@synthesize 属性名称;”即可根据设置好的赋值方法来进行属性的读写。在这种方式下,也可以使用第一种方式来定制get/set操作,从而实现赋值带来的其他操作。

呜啊 一开始需要了解的也就这么多了吧……

Objective-C 快速教程 偶的修改版

顶一下
(1)
踩一下
(0)