搜集的不错的oc学习资料

大概总结:

http://my.oschina.net/luoguankun/blog/208526

详细教程:

http://www.w3cschool.cc/ios/ios-objective-c.html

ios不同于java平台下的一些细节:

、 id:

Objective-C有一种比较特殊的数据类型是id。你可以把它理解为“随便”。

在Objective-C里,一切东西都是指针形式保存,你获取到的就是这个对象在内存的位置。那么id就是你知道这个位置,但是不知道里面是啥的时候的写法。

、 同一个数组可以保存不同的对象:

比如一个数组NSArray,这种数组里面可以保存各种不同的对象,比如这个数组里:

myArray <—-|

: (float) 234.33f

: @”我是个好人”

: (NSImage *)

: @”我真的是好人”

这是一个由4个东西组成的数组,这个数组包括一个浮点数,两个字符串和一个图片。

、BOOL,YES,NO:

你可以认为YES表示C#或者Java里的true,NO表示false。而实际上YES是1,NO是0,BOOL本身就是个char。

、IBOutlet、IBAction是啥玩意,总能看到。

这两个东西其实在语法中没有太大的作用。如果你希望在Interface Builder中能看到这个控件对象,那么在定义的时候前面加上IBOutlet,在IB里就能看到这个对象的outlet,如果你希望在Interface Builder里控制某个对象执行某些动作,就在方法前面加上(IBAction)。

而这两个东西实际上和void是一样的。

、nil。

Objective-C里的NULL(空)就这么写,表示空指针。

、为什么是@”字符串”而不是”字符串”

前面加上@符号,编译器在编译的时候会在程序中给你留出位置,这样才能保证这个字符串不会丢失。反正记住,如果你要想把某些字符串写死在程序里,就要用@”字符串”,如果忘了用@,程序应该会出错。

superzhou大侠指正:

、为什么是@”字符串”而不是”字符串”

”字符串”是C的字符串,@”"是把C的字符串转成NSString的一个简写.

在需要NSString的地方才需要这个转化,例如NSLog里面.

在需要C string的地方,还是用”字符串”的.

另外,@”"这个转换是不支持中文的.例如NSLog(@”字符串”); 是一定输出不了中文的.

Objective-C 2.0

Objective-C .0是Leopard新增加的一门语言,其实和原来的Objective-C是一样的。主要是增加了属性。详细的内容这里不写了,可以参阅Allen Dang的这篇文章,写的很明白。

:NS****
老乔当年被人挤兑出苹果,自立门户的时候做了个公司叫做NextStep,里面这一整套开发包很是让一些科学家们喜欢,而现在Mac OS用的就是NextStep这一套函数库。 这些开发NextStep的人们比较自恋地把函数库里面所有的类都用NextStep的缩写打头命名,也就是NS****了。比较常见的比如: ◆NSLog ◆NSString ◆NSInteger ◆NSURL ◆NSImage …

object-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=@””; } -(BOOL) isCaughtKid:{ return YES; } @end 注:'-'表示这个函数是实例函数(类似非静态函数),'+'表示这个函数是类函数(类似静态函数) :一个方法如何传递多个参数? 一个方法可以包含多个参数(参数用空格隔开),不过后面的参数都要写名字。
多个参数的写法 (方法的数据类型) 函数名: (参数1数据类型) 参数1的数值的名字 参数2的名字: (参数2数据类型 ) 参数2值的名字 …. ; 举个例子,一个方法的定义: -(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName;
实现这个函数的时候: -(void) setKids: (NSString *)myOldestKidName secondKid: (NSString *) mySecondOldestKidName thirdKid: (NSString *) myThirdOldestKidName{ 大儿子 = myOldestKidName; 二儿子 = mySecondOldestKidName; 三儿子 = myThirdOldestKidName; }
调用的时候: Kids *myKids = [[Kids alloc] init]; [myKids setKids: @”张大力” secondKid: @”张二力” thirdKid: @”张小力”];

object-c:的一些基本用法

1减号(或者加号)
减号表示一个函数、或者方法、或者消息的开始,怎么说都行。
比如c#中,一个方法的写法可能是:
private voidhello(bool ishello)
{
//OOXX
}
用Objective-C写出来就是
-(void) hello:(BOOL)ishello
{
//OOXX
}
挺好懂的吧?
不过在Objective-C里面没有public和private的概念,你可以认为全是public。
而用加号的意思就是其他函数可以直接调用这个类中的这个函数,而不用创建这个类的 实 例。
中括号
中括号可以认为是如何调用你刚才写的这个方法,通常在Objective-C里说“消息”。
比如C#里你可以这么写:
this.hello(true);
在Objective-C里,就要写成:
[selfhello:YES]; 、为什么是@”字符串”而不是”字符串”
”字符串”是C的字符串,@”"是把C的字符串转成NSString的一个简写.
在需要NSString的地方才需要这个转化,例如NSLog里面.
在需要C string的地方,还是用”字符串”的.
另外,@”"这个转换是不支持中文的.例如NSLog(@”字符串”); 是一定输出不了中文的.

对象初始化:

两种创建新对象的方法:

[类名 new]

[[类名 alloc] init]

这两种方法是等价的,但cocoa的惯例是使用后者。

alloc在为对象分配空间的同时,将这块内存初始化为0;

Init方法:初始化实例变量,使对象处于可用状态。[返回类型为id,  返回的值描述了被初始化的对象]

使用new创建新对象时,系统要完成两个步骤:

1.       为对象分配内存,即对象获得一个用来存放其实例变量的内存块;

2.       自动调用init方法,让该对象处于可用状态。

NSLog:

 规则:

        %@ 对象

    %d, %i 整数

%u 无符整形

%f 浮点/双字

%x, %X 二进制整数

%o 八进制整数

%zu size_t%p 指针

%e 浮点/双字 (科学计算)

%g 浮点/双字

%s C 字符串

%.*s Pascal字符串

%c 字符

%C unicha

r%lld 64位长整数

(long long)%llu 无符64位长整数

%Lf 64位双字

实例:

  NSLog (@"this is a test");

  NSLog (@"string is :%@", string);

  NSLog (@"x=%d, y=%d", 10, 20);

  但是下面的写法是不行的:

  int i = 12345;

  NSLog( @"%@", i );

  原因是, %@需要显示对象,而int i明显不是一个对象,要想正确显示,要写成:

  int i = 12345;

  NSLog( @"%d", i );

NSString *tempA = @"123";

NSString *tempB = @"456";

1,字符串拼接

NSString *newString = [NSString stringWithFormat:@"%@%@",tempA,tempB];

2,字符转int

int intString = [newString intValue];

3,int转字符

NSString *stringInt = [NSString stringWithFormat:@"%d",intString]

4,字符转float

float floatString = [newString floatValue];

5,float转字符

NSString *stringFloat = [NSString stringWithFormat:@"%f",intString];

04-14 00:44