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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值