Obj-C 初识
1、Obj-C代码的扩展名为“.m”.
2、Obj-C的要包含头文件时,可以使用 #include 但更一般的使用 #import ( 由GCC编译器提供),后者可以保证头文件只被包含一次(l类似C中的#ifdef)。
3、有关Cocoa 的框架,可参照
http://www.cocoachina.com/newbie/basic/2009/0611/130.html
4、hello Objecitve-C
#import <Foundation/Foundation.h>
Int main(int argc, const char *arge[])
{
NSLog (@”Hello Obj-C!”);
Return (0);
}
NSLog()函数中的NS:Cocoa对所有函数、常量和类型名称都添加了NS前缀。(NSLog(@”%d is a %@”,a,@”num”);)
@”Hello Obj-C!”:obj-c添加的特性,双引号中的 字符串前有一个@,表示引用的字符串应该作为Cocoa的NSString元素处理。
5、c中的bool的true和false对应Cocoa中的BOOL的YES和NO()1个字节.(注意:在obj-c中不能理解 非零值为YES,1不等于YES)
6、Id 类型
在Objective-C 中,id 类型是一个独特的数据类型。在概念上,类似Java 的Object 类,可以转换为任何数据类型。换句话说,id 类型的变量可以存放任何数据类型的对象。在内部处理上,这种类型被定义为指向对象的指针,实际上是一个指向这种对象的实例变量的指针。id 是一个指向任何一个继承了Object(或者NSObject)类的对象。需要注意的是id 是一个指针,所以在使用id的时候不需要加星号。http://book.51cto.com/art/201105/262238.htm
7、obj-c中的方括号:
用于通知某个对象该干什么。在方括号中,第一项是对象,其余部分是你需要对象执行的操作(调用函数)。
8、方法声明与调用:
@interface Circle : NSObject
{
ShapeColor fillColor;
ShapeRect bounds;
}//创建两个实例变量
- (void) setFillColor: (ShapeColor) fillColor;
- (void) setBounds: (ShapeRect) bounds;
- (void) draw;
@end // Circle
@interface Circle : NSObject ---定义了Circle的 类,该类是基于NSObject的,即继承。
- (void) draw; 前面的短线表示这是obj-c中的方法声明,这是一种区分函数原型与方法声明的方式;void代表返回值为空,draw为方法名。
- (void) setFillColor: (ShapeColor) fillColor;
- (void) setBounds: (ShapeRect) bounds;
这两个声明的方法中都有一个参数, (参数类型)参数
有如:
-(void) setTo: (int) n over: (int) d
{
numerator = n;
denominator = d;
}
[aFraction setTo: 100 over: 200];//调用
注:objective-c 的方法参数名有些怪异,第一个参数是没有参数名的,如果硬要说有,那就是方法名,
统一说来,见到冒号,冒号前面那个就是参数名。
再举例,没有参数名的方法定义与调用:
-(int) set: (int) n: (int) d;
[aFraction set: 1 : 3];//调用
(http://www.cnblogs.com/54007/archive/2011/02/10/1950801.html)
@interface为类的声明,一般在头文件中;@implementation为类的实现,一般在”.m”文件中,接下来就是各个方法的定义,不必按照@interface中的顺序定义方法,甚至可以定义在@interface中无相应声明的方法。@interface和@implementation方法的形式参数名要避免相同。
9、实例化对象:id ivars = [Class new];
10、每个方法的调用都包括了一个名为self的隐藏函数,同时对象本身。使用self参数后,方法可以查找并操作对象的数据(this指针)。
11、继承:e.g. @interface Circle : NSObject
Obj-c不支持多继承,例如:@interface Circle : NSObject , PrintableObject是不能够被编译器识别的。但是可以从其他特性吸收多继承的优点:如分类、协议。
12、重构:移动和简化代码的方式。
13、obj-c中的super相当于调用父类的方法,在重写方法中充分利用超类代码。
14、description:
-------------------------------------------------------
@interface Tire :NSobject
@end
@implementation tire
-(NSstring *) description
{
return(@"i am a tire");
}
NSLog (@"%@", tires);
descriptong方法默认返回对象的描述信息,
NSLog(@"%@", objectA);这会自动调用objectA的descriptong方法来输出ObjectA的描述信息,
当我们重写某个类的descriptong方法后,
再次输出NSLog(@"%@", objectA);时,就会调用我们覆写的descriptong方法,这样就达到自定义对象的描述信息!!!
15、存取方法(accessor method):用来读取或改变对象特定属性的方法。如setter、getter方 法(注意:setter方法的方法名一般加set前缀,e.g.setEngine,getter则根据返回的属性的名称来命名,e.g.engine.因为get在cocoa中有特殊含义,它意味着这个方法会通过你当做参数传入的指针来返回数值)。
在对其他对象的属性进行操作时,应该始终使用对象所提供的存取方法,永远不要直接改变其他对象属性的数值。如,main函数不应直接访问类的实例变量。这也是间接的一种体现。
16、exit()函数:exit(1)表示发生错误后退出程序,exit(0)表示正常退出。参数0和1是返回给操作系统的,操作系统根据参数判断程序是否正常执行了。(that is 防御式编程)
17、Obj-C中所有对象间的交互都是通过指针实现的。
18、@class 某些情况可代替#import ,减少编译次数,e.g.在复合类中的头文件中使用。。。
19、一些有用的数据类型(struct):NSRange、NSPoint、NSSize、NSRect…..
20、NSString类的方法
创建字符串 +(id) stringWithFormat : (NSString *) format,……;
e.g. NSString *height;
height = [ NSString stringWithFormat: @”height is %d feet, %d inchs”,5 , 11];
如果在声明方法时添加了加号,表示这个方法定义为类方法(工厂方法)。这个方法属于类对象(而不是类的实例对象)并且通常用于创建新的实例。
大小 -(unsigned int) length;
e.g. unsigned int length = [height length];
比较 – (BOOL) isEqulToString: (NSString *) aSting; 还有compare方法
检查字符串内是否还包含别的字符串:hasPrefix hasSuffix
NSSting为不可改变的字符串类型,其子类NSMutableString为可修给的字符串类型。
NSMutableString类的方法:
创建 stringWithCapacity,当然stringWithFormat也可以
添加字符: appendString 、 appendFormat
删减字符: deleteCharactersInRange与rangeOfString集合使用
21、NSArray类:
创建 arrayWithObjects方法
e.g. NSArray *array;
array = [NSArray arrayWithObjecrs: @”one”, @”two”, @”three” , nil];(nil空,表列表结束)
[array count]可获得数组个数
[array objectAtIndex:i] 可得到数组的内容(索引遍历)
切分数组componentsSeparatedByString
合并数组componentsJoinedByStrring
可变数组NSMutableArray类:addObject,removedObjectAtIndex
22、枚举器NSEnumerator
NSEnumerator *enumerator;
Enumerator = [array objectEnumerator];//向数组请求枚举器
id thingie;
while(thingie = [enumerator nextObject]){
NSLog(@”I found %@”, thingie);
}
23、快速枚举:
for(NSSting *string in array){
NSLog(@”I found %@”, string);
}
24、NSDictionary字典 散列表 关联数组:在给定的key(通常是NSString)下存储一个value(可以使任何类型的对象)
Of course, 也有NSMutableDictionary
25、NSNumber:Cocoa用来包装基本数据类型的类。
NSValue可以包装任意值
作者:老Zhan
出处:http://www.cnblogs.com/mybkn/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。