objective-c感悟(一)oc简介与常用类型

来源:互联网 发布:好用的外文数据库 编辑:程序博客网 时间:2024/05/15 23:50

objective-c是在c的基础上设计的一门面向对象的语言,它可以兼容c的语法,因为c的语法是它的一部分。xcode中.m文件只能使用oc,把名称改成.mm就可以进行oc与c++的混合编程了。要注意的是它们之间只能进行类跟对象的方法调用,不能直接在类的声明中声明另一个语言中类的对象,不然编译报错。

cocoa是苹果的一个开发框架,包含了许多个框架在里面。fundation框架是最基本框架,可以用于Mac os X,也可用于ios,它是在corefoundation基础上实现的,后者用纯c实现。appkit是一Mac os X的一个框架,包含了基本的视图控件。uikit类似appkit,是用于ios的,它们都是在core graphics上实现的,后者是纯c实现。加了core的一般是纯c实现,必进底层东西要求效率,使用c自然不过的了。

objective-c的一些类型如下:

NSString 字符串 NSMultableString 可变字符串

NSArray 数组 NSMultable 可变数组

 NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:@"123",@"key1",@"234",@"key2",nil,@"11111",@"222",nil];  

dictionaryWithObjectsAndKeys创建了一个NSDictionary,nil告诉这个函数哪里结束,后面如果再加object:key的话,也是没用的,上面就是一个例子。

NSMutableDictionary *mdict = [NSMutableDictionary dictionary];[mdict setObject:@"gugugu" forKey:@"qinwa"];[mdict setObject:@"jiiji" forKey:@"xiaoji"];for (NSString *key in mdict){NSLog(@"%@:%@", key, [mdict objectForKey:key]);}

NSMutableDictionary 是一个可变的字典类, dictionary方法可以创建一个实例, setObject: forKey是添加一个字典项。 上面for语句使用的是fast enumeration快速枚举,类似javazhongdeforeach。


//    装箱 拆箱    NSNumber *a = [NSNumber numberWithInt:1234];    NSNumber *s = @'d';    NSNumber *i = @1234;        NSLog(@"%c", [s charValue]);    //    NSValue    SS sss = {2, 2};    NSValue * v = [NSValue valueWithBytes:&sss objCType:@encode(SS)];        SS pss;    [v getValue:&pss];    NSLog(@"%d %d", pss.a, pss.b);
<pre name="code" class="objc">//    NSValue    int ii = 100;    NSValue * v = [NSValue valueWithBytes:&ii objCType:@encode(int)];        int iii;    [v getValue:&iii];    NSLog(@"iii:%d ", iii);


NSNumber是对基本类型进行的一个boxing操作。oc并没有提供自动装箱与拆箱操作,不知道未来会不会提供。可以用numberWith[TYPE]来装箱某个类型,[TYPE]Value来进行拆箱。

NSValue是NSNumber的父类,它可以包装一切对象。可以包装结构、类,基本类型也可以。它做的事情就是把对象的每个字节保存起来,@encode是编译器提供的一个命令,可以得到一个字符串,它用来描述一个类型的。




0 0
原创粉丝点击