iOS开发-OC篇-NSSet,NSNumber

最近回顾了OC的一些基本知识,发现确实遗忘了很多重要的东西,今天整理了一些小的知识点,和大家分享一下。

iOS的集合对象不可以存储C语言基本类型,所有可以进行装箱和拆箱,来进行OC对象操作。

1、NSNumber包装类

1>  普通初始化

NSNumber * num1 = [[NSNumber alloc] initWithInt:20];

NSNumber * num2 = [NSNumber numberWithChar:‘a‘];

2>字面量初始化

NSNumber * num3 = @300;

NSNumber * num4 = @123.2;

NSNumber * num5 = @‘X‘;

3>变量初始化

int a = 29;

NSNumber * num5 = @(a);

4>NSNumber转基本数据类型

charValue,intValue,longValue,doubleValue

2、NSValue包装类

举例:

typedef struct {

int age;

char * name;

char sex;

} SPerson;

SPerson person;

person.name = "dahuan";

person.age = 10;

person.sex = ‘m‘;

//将一个结构体转换为NSValue对象,

//@encode(aType) 可以返回该类型的 C 字符串(char *)的表示

NSValue * value = [NSValue valueWithBytes:&person objCType:@encode(SPerson)];

SPerson person2;

//将一个NSValue对象转换为结构体

[value getValue:&person2];

NSLog(@"%s",person2.name);

NSLog(@"%d",person2.age);

NSLog(@"%c",person2.sex);

NSRange range = {12,2};

//常用结构体装箱

NSValue * rvalue =[NSValue valueWithRange:range];

//rangeValue将NSRange拆箱

NSLog(@"%@",NSStringFromRange([rvalue rangeValue]));

3、区分各种空值

nil是一个对象指针为空

Nil是一个类指针为空

NULL是基本数据类型为空。

NSNull空对象 是可以放在数组里的

4、NSSet用法

1>  NSSet初始化

NSSet * set = [[NSSet alloc] initWithObjects:@"a",@"b",@"c", nil];

NSSet * set1 = [NSSet setWithObjects:@"z",@"x",@"c", nil];

NSSet * set2 = [NSSet setWithArray:array];

2> 获取NSSet中任意对象

[set2 anyObject]

3> 是否包含某对象

[set2 containsObject:@"w"]

4> 是否有相同元素

[set intersectsSet:set2]

5、NSMutableSet用法

1> NSMutableSet初始化

NSMutableSet * set = [[NSMutableSet alloc] initWithCapacity:0];

2>  追加删除和NSMutableArray一样

3> 取两个NSSet的并集

[set unionSet:set2]

4> NSSet减去一样的元素

[set minusSet:set2]

5> 取两个NSSet的交集

[set intersectSet:set2]

6、NSDictionary用法

1> NSDictionary初始化

NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2", nil];

NSDictionary * dict2 = [NSDictionary dictionaryWithObjects:@[@"value1",@"value2"] forKeys:@[@"key1",@"key2"]];

NSDictionary * dict3 = @{@"key1":@"value1",@"key2":@"value2”};//字面量形式

2> 通过key值获取value值

[dict3 objectForKey:@(2)] //key值可以是任意对象

[dict3 valueForKey:@"key2"] //key值只能是NSString

dict3[@"key2"]  //字面量形式,建议使用

3> 获取字典中所有的key值

[dict3 allKeys]

4> 获取字典中所有的value值

[dict3 allValues]

时间: 2024-12-20 01:12:02

iOS开发-OC篇-NSSet,NSNumber的相关文章

iOS开发——OC篇&消息传递机制(KVO/NOtification/Block/代理/Target-Action)

iOS开发中消息传递机制(KVO/NOtification/Block/代理/Target-Action) 今晚看到了一篇好的文章,所以就搬过来了,方便自己以后学习 虽然这一期的主题是关于Foundation Framework的,不过本文中还介绍了一些超出Foundation Framework(KVO和Notification)范围的一些消息传递机制,另外还介绍了delegation,block和target- action. 大多数情况下,消息传递该使用什么机制,是很明确的了,当然了,在某

iOS开发——OC篇&纯代码退出键盘

关于iOS开发中键盘的退出,其实方法有很多中,而且我也学会了不少,包括各种非纯代码界面的退出. 其实这里纯代码界面推出如果用到Xib何Storyboard上面去还是一样的思路操作,只不过笔者在开发的时候是在纯代码界面遇到的问题,所以久以此命名. 下面大家介绍怎么在纯代码的情况下,退出(隐藏)键盘,Xib和StoryBoard情况下这里就不解释了(照此思路). 一:UITextField 关于UITextFiel个人感觉又很多中方法,但是最近开发中我用的最多的也就是这两种,根据和已经在公司上班的同

iOS开发——OC篇&常用问题解答(二)

101.编译错误:ld: library notfound for -lPods 当项目中使用了 cocoaPods 时,经常出现此错误(通常是 release 的时候). 这是由于 pod install 后,cocoaPods 会创建一个新的 workspace.你必须关闭项目并重新打开.问题即可解决. 102.为什么 iOS 的时间总是比真实时间慢8小时 例 如,一个北京时间"2014-4-4 22:00"(字符串),需要转换成 NSDate.字符串转换成 NSDate 一般是通

iOS开发——OC篇&常用问题解答(一)

常用问题解答 1.设置 ImagePicker 的大小 ImagePicker 在 Popover Controller 总是以默认大小显示,设置 popoverContentSize 属性似乎无用.解决办法是将ImagePicker “包含”到一个定制的 ViewController 中,然后再 presentPopover 这个 ViewController : UIViewController *containerController = [[UIViewController alloc]

iOS开发-OC篇-KVC详解

说到KVC,不得不承认KVC在开发过程中是神器一般的存在.如果正确灵活使用kvc,会使得整个开发过程轻松很多. KVC的使用 1.KVC 全称 key valued coding 键值编码 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性.JAVA,C#都有这个机制.ObjC也有,所以你根部不必进行任何操作就可以进行属性的动态读写,就是KVC. KVC的操作方法由NSKeyValueCoding提供,而他是NSObjec

iOS开发-OC篇 load方法 和 initialize方法比较

Load方法 和 initialize方法的比较    在OC语言中,我们相比之下对于load和initialize方法的使用比较少,所以会不是很清楚的了解二者的用途和区别,所以整理了一下,和大家进行分享,有所得不对的地方,希望能够指出来,多谢! 1.load方法特点: 1> 当类被引用进程序的时候会执行这个函数 2> 一个类的load方法不用写明[super load],父类就会收到调用,并且在子类之前. 3> Category的load也会收到调用,但顺序上在主类的load调用之后.

iOS开发-OC篇-NSDate

今天总结一下OC中NSDate的一些简单的用法,注意可不是NSData哦! NSDate的使用 1> NSDate初始化方法 //获取当前时间 NSDate * date = [NSDate date]; //返回以当前时间为基准,然后过了secs秒的时间 [NSDate dateWithTimeIntervalSinceNow:60 * 60 * 24]; //返回以lastDate为基准,然后过了secs秒的时间 [NSDate dateWithTimeInterval:60 * 60 *

iOS开发——OC篇&协议篇/NSCoder/NSCoding/NSCoping

协议篇/NSCoder/NSCoding/NSCoping 协议声明类需要实现的的方法,为不同的类提供公用方法,一个类可以有多个协议,但只能有一个父类,即单继承.它类似java中的接口. 正式协议(formal protocol)------------------------------------------------------------------------------------声明正式协议使用@protocol指令,以@end结尾. @protocol MyXMLSupport

iOS开发-OC篇-单例模式

回顾一下load和initialize方法,有几点需要注意. load方法和initialize方法分析: 1.load方法: 1> 当类被引用进程序的时候会执行这个函数 2> 一个类的load方法不用写明[super load],父类就会收到调用,并且在子类之前. 3> Category的load也会收到调用,但顺序上在主类的load调用之后. 2.initialize方法: 1> initialize的自然调用是在第一次主动使用当前类的时候 2> 和load不同,即使子类