Object-C总结
1.减号 (-)和加号 (+)
减号 表示一个函数、方法、或者消息的开始 (实例方法)
加号 表示其他函数可以直接调用这个类中的这个函数,而不要创建实例 (类方法)
注:Object中没有public和private的概念,你可以认为全部是public
Objective-C与C++的不同之处有:
Objective-C中所有的类都必须继承自NSObject。
Objective-C中所有对象都是指针的形式。
Objective-C用self代替this。
Objective-C使用id代替void*。
Objective-C使用nil表示NULL。
Objective-C只支持单继承。
Objective-C使用YES/NO表示TRUE/FALSE
Objective-C使用#import代替#include
Objective-C中用消息表示类的方法,并采用[aInstance method:argv]调用形式。
Objective-C支持反射机制。
Objective-C支持Dynamic Typing, Dynamic Binding和Dynamic Loading。
2.中括号 [ ] 时一个消息
3.NS**** 函数库中类都有NextStep打头 这是一个缩写前缀
Objective-C中的命名前缀说明:
NS:NextStep
CF:Core Foundation
CA:Core Animation
CG:Core Graphics
UI:User Interface
4.import等同于#include
5.@interface 用来定义类
@interface A:NSObject
@end
6.@implementation 用来实现类
@implementation A
@end
7.一个方法如何传递多个参数
Objective-C中的函数声明格式有:
-/+ (return type) function_name;
-/+ (return type) function_name : (parameter type) parameter;
-/+ (return type) function_name :
(parameter type) parameter1 otherParameter :
(parameter_type) parameter2
以上参数说明: – 表示一般函数,+ 表示静态函数。
otherParameter是参数的别名(第一个参数的别名省略),在函数调用时方便指定。
注:(方法的数据类型)函数名:(参数1数据类型)参数1的数值的名字
参数2的名字:(参数2的数据类型)参数2的数值名字
如:-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
举个例子,一个方法的定义:
-(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: @”张小力”];
- id等同于void
在Object-C里,一切都是用指针存在,你获取到的就是
那个对象在内存的位置,那么id就是知道这个位置
- NSArray 数组
NSArray *array=[NSArray arrayWithObjects: @"One", @"Two", @"Three", nil];
//从这个类方法 arrayWithObjects 的定义可以看出,它使用 nil 表示数组元素结束,这也是 nil 不能存储在 NSArray 中的原因。
int count=[array count];//获取数组元素的格式,本例中为 3。
int i;
for(i=0; i<count;i++){
NSLog(@"%@",[array objectAtIndex: i]);
//遍历数组元素,objectAtIndex 方法获取指定索引位置的元素。 }
NSString *s=@"iPhone,Android,Windows Phone 7";
array=[s componentsSeparatedByString: @","];//按照一个字符串将字符串拆分为数组。
s=[array componentsJoinedByString: @" "];//按照一个字符串将数组连接为字符串。
同理,NSMutableArray 为长度可变的数组,相当于 JAVA 中的 List。 例:
NSMutableArray *mArray=[NSMutableArray arrayWithCapacity: 10];
[mArray addObject: @"Apple"];//添加数组元素
[mArray addObject: @"Google"];
[mArray addObject: @"MicroSoft"];
[mArray removeObjectAtIndex: 2];//移除指定索引位置的数组元素
s=[mArray componentsJoinedByString: @","];//拼接数组元素为字符串
NSLog(s);
3 字典
NSDictionary 用于存储 key-value 的数据结构,与 JAVA 中的 Map 类似。
例:
NSDictionary *dic=[NSDictionary dictionaryWithObjectsAndKeys: @"Apple", @"A", @"Google", @"G", nil];
//dictionaryWithObjectAndKeys 后的可变参数,每两个为一个 value-key,以 nil 表示结束。
NSLog(@"%@",[dic objectForKey: @"A"]);//按照指定的 key 查询 value
同样的有 NSMutableDictionary 表示长度可变的字典。
例:
NSMutableDictionary *mDic=[NSMutableDictionary dictionaryWithCapacity: 10];
[mDic setObject: @"Apple" forKey: @"A"];//添加 value-key 对
[mDic setObject: @"Google" forKey: @"G"];
[mDic setObject: @"Windows Phone 7" forKey: @"W"];
[mDic removeObjectForKey: @"W"];//移除指定 key 的 value
10.BOOL 其实一个char 是低八位的值大于0就是1否则为0
10,nil 就是NULL 表示空指针
11, @" xxxx" 字符串 但@" " 不支持中文
这篇Objective-C的参考资料也比较好,如果你有兴趣可以一读。
http://www.otierney.net/objective-c.html.zh-tw.big5
- NSAutoreleasePool :半自动管理内存
2.数据缓冲区 NSDate类型来实现缓冲区
NSDate是一个长度不可变的数据缓冲区,NSMutabelDate用来存储长度可变的数据缓冲区
3. Object-C 中的一个对象是否可以被复制,要看它的类型是否遵循 NSCopying 协议,这个协议 中有个复制方法-(id) copyWithZone: (*NSZone) zone 需要我们去实现
4.多线程
线程 NSThread Object-C中NSthread类型表示线程,线程对象创建有一下几种方法
A.- (id) init;
B.- (id) initWithTarget: (id) target selector: (SEL)selector object: (id) argument;
第一个参数指定目标对象,一般情况下就是当前的实例 self。第二个参数指定要运行的方法, 相当于 JAVA 中的 run 方法。第三个参数一般为 nil。
C.+(void) detachNewThreadSelector:(SEL)aSelector
toTarget:(id)aTarget withObject:(id)anArgument
这个方法是类方法,与第二个方法其实在参数上是一致的,区