字符串,数组,字典方法
2015-11-05 21:49
253 查看
1. NSString介绍 、NSMutableString介绍
NSString的常见方法:
- (NSString *)uppercaseString; 全部字符转为大写字母
- (NSString *)lowercaseString 全部字符转为小写字母
- (NSString *)capitalizedString
首字母变大写,其他字母都变小写。如果一个句子中有多个单词,那么会将每个单词的首字母 变成大写,其余字母变成小写
- (BOOL)isEqualToString:(NSString *)aString; 两个字符串的内容相同就返回YES, 否则返回NO 注意: == 比较的是两个对象的地址是否相同, 不是字符串内容
- (NSComparisonResult)compare:(NSString *)string; 这个方法可以用来比较两个字符串内容的大小 比较方法: 逐个字符地进行比较ASCII值,返回NSComparisonResult作为比较结果
NSComparisonResult是一个枚举,有3个值:
如果左侧 > 右侧,返回NSOrderedDescending,
如果左侧 < 右侧,返回NSOrderedAscending,
如果左侧 == 右侧返回NSOrderedSame - (NSComparisonResult) caseInsensitiveCompare:(NSString *)string;
忽略大小写进行比较,返回值与compare:一致 - (BOOL)hasPrefix:(NSString *)aString;
是否以aString开头 - (BOOL)hasSuffix:(NSString *)aString;
是否以aString结尾 - (NSRange)rangeOfString:(NSString *)aString;
用来检查字符串内容中是否包含了aString 如果包含, 就返回aString的范围 如果不包含, NSRange的location为NSNotFound, length为0 反方向搜索:[str rangeOfString: @”str” options: NSBackwardsSearch]; // 从后向前 搜索 - (NSString *)substringFromIndex:(NSUInteger)from; 从指定位置from开始(包括指定位置的字符)到尾部
- (NSString *)substringToIndex:(NSUInteger)to; 从字符串的开头一直截取到指定的位置to,但不包括该位置的字符
- (NSString *)substringWithRange:(NSRange)range; 按照所给出的NSRange从字符串中截取子串
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;
用replacement替换target
- (NSUInteger)length; 返回字符串的长度(有多少个字符,无论中文字符、英文字符等等,一个字符就是一个字符)
- (unichar)characterAtIndex:(NSUInteger)index; 返回index位置对应的字符
字符串转为基本数据类型 - (double)doubleValue;
- (float)floatValue;
- (int)intValue;
- (char *)UTF8String; // 在操作SQLite数据库时才会用到 转为C语言中的字符串。 以后可能会用到别人的框架,都是纯C语言的,所以可能会用到把OC字符串转换为C语言的字
符串。 /** 参考代码:
C语言字符串: char *name = “steve”;
NSString *s1 = @"123”; char *s2 = s1.UTF8String; printf("%s", s2);
*/
去除所有的空格 [str stringByReplacingOccurrencesOfString:@" " withString:@""]
去除首尾的空格 [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
6> NSString的不可变性
* NSString *s1 = @"aa"; s1 = @"bb"; // 问: 这种情况是字符串发生改变了吗? 回答: 这种情况只是指针变量s1 重新指向了, 分配好的字符串空间中的内容并没有发生改变。
* 为什么要有NSMutableString? 因为如果使用NSString进行字符串拼接的时候, 会产生大量 垃圾内存, 创建很多无用的对象, 浪费内存, 消耗cpu性能。
1> C语言中数组的弊端, int array[4] = {10, 89, 27, 76}; * 只能存放一种类型的数据.(类型必须一致) * 不能很方便地动态添加数组元素、不能很方便地动态删除数组元素(长度固定)
2> NSArray的创建方式: + (instancetype)array;
+ (instancetype)arrayWithObject:(id)anObject; + (instancetype)arrayWithObjects:(id)firstObj, ...; + (instancetype)arrayWithArray:(NSArray *)array; @[item1, item2, item3, ......]; --------------- 根据文件来创建 ---------------- + (id)arrayWithContentsOfFile:(NSString
*)path; // 读取一个xml文件. + (id)arrayWithContentsOfURL:(NSURL *)url; // 读取一个xml文件.
3> NSArray的特点: * 只能存放任意OC对象, 并且是有顺序的 * 不能存储非OC对象, 比如int\float\double\char\enum\struct等 * 它是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也 不能再往里面添加元素 * NSArray直接使用NSLog()作为字符串输出时是小括号括起来的形式。 * NSArray中不能存储nil,因为NSArray认为nil是数组的结束(nil是数组元素结束的标
记)。nil就是0。0也是基本数据类型,不能存放到NSArray中。 nil Nil NULL [NSNULL null];
* NSArray *array = [NSArray array]; // 这样的数组永远是空的,不可能向其中增加值。(不 可变性)
4> NSArray的常见方法:
- (NSUInteger)count; 获取集合元素个数
- (id)objectAtIndex:(NSUInteger)index; 获得index位置的元素, 等价于array[index];
- (BOOL)containsObject:(id)anObject; 是否包含某一个元素
- (id)lastObject; 返回最后一个元素
- (id)firstObject; 返回最后一个元素
- (NSUInteger)indexOfObject:(id)anObject; 查找anObject元素在数组中的位置(如果找不到,返回-1)NSNotFound
- (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range; 在range范围内查找anObject元素在数组中的位置
- (void)makeObjectsPerformSelector:(SEL)aSelector; - (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument;
5> NSArray遍历元素 * 遍历, 就是将NSArray里面的所有元素一个一个取出来查看
* 常见的遍历方式有 *普通遍历 for (int i = 0; i<array.count; i++) { }
*快速遍历 for (id obj in array) { }
*Block遍历 [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
}];
6> 将一个NSArray保存到文件中 - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically; ** 演示: 把一个NSArray中的所有字符串元素写入到一个xml文件中。 ** 注意: 目前这里只支持NSArray中保存字符串、Dictionary或一写OC对象的数字类型写入文 件。(其他类型需要用到NSCoding协议)
7> 字符串拼接, 字符串(NSString)的方法:
- (NSString *)componentsJoinedByString:(NSString *)separator; 这是NSArray的方法, 用separator作拼接符将数组元素拼接成一个字符串
8> 字符串分割, 数组(NSArray)的方法:
- (NSArray *)componentsSeparatedByString:(NSString *)separator; 这是NSString的方法, 将字符串用separator作为分隔符切割成数组元素
9> NSMutableArray的特点: * NSMutableArray是NSArray的子类 * NSMutableArray是可变的, 随时可以往里面添加\更改\删除元素, NSArray是不可变的, 一旦初 始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素 * 创建一个空的NSMutableArray: NSMutableArray
*array = [NSMutableArray array];
10> NSMutableArray的常见方法:
- (void)addObject:(id)object; 添加一个元素
- (void)addObjectsFromArray:(NSArray *)array; 添加otherArray的全部元素到当前数组中
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index; 在index位置插入一个元素
- (void)removeLastObject; 删除最后一个元素
- (void)removeAllObjects; 删除所有的元素
- (void)removeObjectAtIndex:(NSUInteger)index; 删除index位置的元素
- (void)removeObject:(id)object; 删除特定的元素
- (void)removeObjectsInRange:(NSRange)range; 删除range范围内的所有元素
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; 用anObject替换index位置对应的元素, 等价于array[index] = anObject;
- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2; 交换idx1和idx2位置的元素
*** 注意: @[item1, item2, item3]这种方式创建的数组永远都是不可变的NSArray。
7. NSDictionary介绍 、 NSMutableDictionary介绍
1> NSDictionary是不可变的, 一旦初始化完毕, 里面的内容就无法修改
2> NSDictionary是以"键值对"的方式来保存数据。
3> NSDictionary的创建方式: + (instancetype)dictionary;
+ (instancetype)dictionaryWithObject:(id)object forKey:(id <NSCopying>)key; // objectForKey,根据键取值。
+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...; @{@"zs" : @"zhangsan", @"ls" : @"lisi", @"ww" : @"Wangwu"};
4> NSDictionary的常见方法:
- (NSUInteger)count; 返回字典的键值对数目
- (id)objectForKey:(id)aKey; 根据key取出value, 等价于: dict[aKey];
* 快速遍历 for (NSString *key in dict) { }
* Block遍历 [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
}]; ** 注意: 字典遍历的顺序是不一定的。]
5> 将字典中的内容写入到文件: * 将字典写入文件中 - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile; - (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;
* 将文件中的数据读取到字典中: + (id)dictionaryWithContentsOfFile:(NSString *)path; + (id)dictionaryWithContentsOfURL:(NSURL *)url;
* 要求掌握: 1.直接调用dict 的wrieToFile方法 2.把多个dict加到array中调用array的writeToFile方法。 3.从文件中读取数据到字典
** 注意: 字典中的键不要重复。(虽然重复也不报错,会自动取在前面的那个)
6> NSMutableDictionary
* NSMutableDictionary是NSDictionary的子类 * NSDictionary是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面 的元素, 也不能再往里面添加元素 * NSMutableDictionary是可变的, 随时可以往里面添加\更改\删除元素
7> NSMutableDictionary的常见操作
- (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey; 添加一个键值对(会把aKey之前对应的值给替换掉), 等价于: dict[@"name"] = @"Jack";
- (void)removeObjectForKey:(id)aKey; 通过aKey删除对应的value
- (void)removeAllObjects; 删除所有的键值对
//通过dictionary属性快速初始化一个NSMutableDictionary dict.dictionary = @{@"name" : @"bob", @"age" : @"18"};
8> 总结 * NSArray和NSDictionary的区别 1> NSArray是有序的,NSDictionary是无序的 2> NSArray是通过下标访问元素,NSDictionary是通过key访问元素
* NSArray的用法
1> 创建 @[@"Jack", @"Rose"] (返回是不可变数组)
2> 访问 id d = array[1];
3> 赋值 array[1] = @"jack";
* NSDictionary的用法
1> 创建
@{ @"name" : @"Jack", @"phone" : @"10086" } (返回是不可变字典)
2> 访问 id d = dict[@"name"];
3> 赋值 dict[@"name"] = @"jack";
NSValue的介绍和使用
NSValue包装对象指针,CGRect结构体等 一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器。它可以保存任意类型的数 据,比如int,float,char,当然也可以是指pointers, structures, and object ids。NSValue 类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的 数据结构,如NSArray或者NSSet的实例。需要注意的是NSValue对象一直是不可枚举的。
为了方便 结构体 和 NSValue 的转换, Foundation 供了以下方法 将结构体包装成NSValue对象 -------> 存储结构体到集合中 + (NSValue *)valueWithPoint:(NSPoint)point; + (NSValue *)valueWithSize:(NSSize)size;
+ (NSValue *)valueWithRect:(NSRect)rect;
从NSValue对象取出之前包装的结构体 - (NSPoint)pointValue; - (NSSize)sizeValue; - (NSRect)rectValue;
1、+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type; 创建一个NSValue
value:对象地址 objCType:通常是一个用来 述对象类型和大小的字符串,@encode可以接受一个数据类型 的名称自动生成一个合适的 述字符串
2、- (void)getValue:(void *)value(出参);
从接受value的对象中 取数值 取的数值,存放在这个指针所指向的内存块里。
typedef struct { int year;
int month;
int day; } Date;
Date d = {2015, 2, 1}; // 将结构体d包装成NSValue对象
NSValue *dValue = [NSValue valueWithBytes:&d objCType:@encode(Date)]; NSArray *array = @[dValue];
// 取出value之前包装的结构体数据 Date newD; [dValue getValue:&newD];
NSString的常见方法:
- (NSString *)uppercaseString; 全部字符转为大写字母
- (NSString *)lowercaseString 全部字符转为小写字母
- (NSString *)capitalizedString
首字母变大写,其他字母都变小写。如果一个句子中有多个单词,那么会将每个单词的首字母 变成大写,其余字母变成小写
- (BOOL)isEqualToString:(NSString *)aString; 两个字符串的内容相同就返回YES, 否则返回NO 注意: == 比较的是两个对象的地址是否相同, 不是字符串内容
- (NSComparisonResult)compare:(NSString *)string; 这个方法可以用来比较两个字符串内容的大小 比较方法: 逐个字符地进行比较ASCII值,返回NSComparisonResult作为比较结果
NSComparisonResult是一个枚举,有3个值:
如果左侧 > 右侧,返回NSOrderedDescending,
如果左侧 < 右侧,返回NSOrderedAscending,
如果左侧 == 右侧返回NSOrderedSame - (NSComparisonResult) caseInsensitiveCompare:(NSString *)string;
忽略大小写进行比较,返回值与compare:一致 - (BOOL)hasPrefix:(NSString *)aString;
是否以aString开头 - (BOOL)hasSuffix:(NSString *)aString;
是否以aString结尾 - (NSRange)rangeOfString:(NSString *)aString;
用来检查字符串内容中是否包含了aString 如果包含, 就返回aString的范围 如果不包含, NSRange的location为NSNotFound, length为0 反方向搜索:[str rangeOfString: @”str” options: NSBackwardsSearch]; // 从后向前 搜索 - (NSString *)substringFromIndex:(NSUInteger)from; 从指定位置from开始(包括指定位置的字符)到尾部
- (NSString *)substringToIndex:(NSUInteger)to; 从字符串的开头一直截取到指定的位置to,但不包括该位置的字符
- (NSString *)substringWithRange:(NSRange)range; 按照所给出的NSRange从字符串中截取子串
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement;
用replacement替换target
- (NSUInteger)length; 返回字符串的长度(有多少个字符,无论中文字符、英文字符等等,一个字符就是一个字符)
- (unichar)characterAtIndex:(NSUInteger)index; 返回index位置对应的字符
字符串转为基本数据类型 - (double)doubleValue;
- (float)floatValue;
- (int)intValue;
- (char *)UTF8String; // 在操作SQLite数据库时才会用到 转为C语言中的字符串。 以后可能会用到别人的框架,都是纯C语言的,所以可能会用到把OC字符串转换为C语言的字
符串。 /** 参考代码:
C语言字符串: char *name = “steve”;
NSString *s1 = @"123”; char *s2 = s1.UTF8String; printf("%s", s2);
*/
去除所有的空格 [str stringByReplacingOccurrencesOfString:@" " withString:@""]
去除首尾的空格 [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
6> NSString的不可变性
* NSString *s1 = @"aa"; s1 = @"bb"; // 问: 这种情况是字符串发生改变了吗? 回答: 这种情况只是指针变量s1 重新指向了, 分配好的字符串空间中的内容并没有发生改变。
* 为什么要有NSMutableString? 因为如果使用NSString进行字符串拼接的时候, 会产生大量 垃圾内存, 创建很多无用的对象, 浪费内存, 消耗cpu性能。
1> C语言中数组的弊端, int array[4] = {10, 89, 27, 76}; * 只能存放一种类型的数据.(类型必须一致) * 不能很方便地动态添加数组元素、不能很方便地动态删除数组元素(长度固定)
2> NSArray的创建方式: + (instancetype)array;
+ (instancetype)arrayWithObject:(id)anObject; + (instancetype)arrayWithObjects:(id)firstObj, ...; + (instancetype)arrayWithArray:(NSArray *)array; @[item1, item2, item3, ......]; --------------- 根据文件来创建 ---------------- + (id)arrayWithContentsOfFile:(NSString
*)path; // 读取一个xml文件. + (id)arrayWithContentsOfURL:(NSURL *)url; // 读取一个xml文件.
3> NSArray的特点: * 只能存放任意OC对象, 并且是有顺序的 * 不能存储非OC对象, 比如int\float\double\char\enum\struct等 * 它是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也 不能再往里面添加元素 * NSArray直接使用NSLog()作为字符串输出时是小括号括起来的形式。 * NSArray中不能存储nil,因为NSArray认为nil是数组的结束(nil是数组元素结束的标
记)。nil就是0。0也是基本数据类型,不能存放到NSArray中。 nil Nil NULL [NSNULL null];
* NSArray *array = [NSArray array]; // 这样的数组永远是空的,不可能向其中增加值。(不 可变性)
4> NSArray的常见方法:
- (NSUInteger)count; 获取集合元素个数
- (id)objectAtIndex:(NSUInteger)index; 获得index位置的元素, 等价于array[index];
- (BOOL)containsObject:(id)anObject; 是否包含某一个元素
- (id)lastObject; 返回最后一个元素
- (id)firstObject; 返回最后一个元素
- (NSUInteger)indexOfObject:(id)anObject; 查找anObject元素在数组中的位置(如果找不到,返回-1)NSNotFound
- (NSUInteger)indexOfObject:(id)anObject inRange:(NSRange)range; 在range范围内查找anObject元素在数组中的位置
- (void)makeObjectsPerformSelector:(SEL)aSelector; - (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)argument;
5> NSArray遍历元素 * 遍历, 就是将NSArray里面的所有元素一个一个取出来查看
* 常见的遍历方式有 *普通遍历 for (int i = 0; i<array.count; i++) { }
*快速遍历 for (id obj in array) { }
*Block遍历 [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
}];
6> 将一个NSArray保存到文件中 - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically; ** 演示: 把一个NSArray中的所有字符串元素写入到一个xml文件中。 ** 注意: 目前这里只支持NSArray中保存字符串、Dictionary或一写OC对象的数字类型写入文 件。(其他类型需要用到NSCoding协议)
7> 字符串拼接, 字符串(NSString)的方法:
- (NSString *)componentsJoinedByString:(NSString *)separator; 这是NSArray的方法, 用separator作拼接符将数组元素拼接成一个字符串
8> 字符串分割, 数组(NSArray)的方法:
- (NSArray *)componentsSeparatedByString:(NSString *)separator; 这是NSString的方法, 将字符串用separator作为分隔符切割成数组元素
9> NSMutableArray的特点: * NSMutableArray是NSArray的子类 * NSMutableArray是可变的, 随时可以往里面添加\更改\删除元素, NSArray是不可变的, 一旦初 始化完毕后, 它里面的内容就永远是固定的, 不能删除里面的元素, 也不能再往里面添加元素 * 创建一个空的NSMutableArray: NSMutableArray
*array = [NSMutableArray array];
10> NSMutableArray的常见方法:
- (void)addObject:(id)object; 添加一个元素
- (void)addObjectsFromArray:(NSArray *)array; 添加otherArray的全部元素到当前数组中
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index; 在index位置插入一个元素
- (void)removeLastObject; 删除最后一个元素
- (void)removeAllObjects; 删除所有的元素
- (void)removeObjectAtIndex:(NSUInteger)index; 删除index位置的元素
- (void)removeObject:(id)object; 删除特定的元素
- (void)removeObjectsInRange:(NSRange)range; 删除range范围内的所有元素
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject; 用anObject替换index位置对应的元素, 等价于array[index] = anObject;
- (void)exchangeObjectAtIndex:(NSUInteger)idx1 withObjectAtIndex:(NSUInteger)idx2; 交换idx1和idx2位置的元素
*** 注意: @[item1, item2, item3]这种方式创建的数组永远都是不可变的NSArray。
7. NSDictionary介绍 、 NSMutableDictionary介绍
1> NSDictionary是不可变的, 一旦初始化完毕, 里面的内容就无法修改
2> NSDictionary是以"键值对"的方式来保存数据。
3> NSDictionary的创建方式: + (instancetype)dictionary;
+ (instancetype)dictionaryWithObject:(id)object forKey:(id <NSCopying>)key; // objectForKey,根据键取值。
+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...; @{@"zs" : @"zhangsan", @"ls" : @"lisi", @"ww" : @"Wangwu"};
4> NSDictionary的常见方法:
- (NSUInteger)count; 返回字典的键值对数目
- (id)objectForKey:(id)aKey; 根据key取出value, 等价于: dict[aKey];
* 快速遍历 for (NSString *key in dict) { }
* Block遍历 [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
}]; ** 注意: 字典遍历的顺序是不一定的。]
5> 将字典中的内容写入到文件: * 将字典写入文件中 - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile; - (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)atomically;
* 将文件中的数据读取到字典中: + (id)dictionaryWithContentsOfFile:(NSString *)path; + (id)dictionaryWithContentsOfURL:(NSURL *)url;
* 要求掌握: 1.直接调用dict 的wrieToFile方法 2.把多个dict加到array中调用array的writeToFile方法。 3.从文件中读取数据到字典
** 注意: 字典中的键不要重复。(虽然重复也不报错,会自动取在前面的那个)
6> NSMutableDictionary
* NSMutableDictionary是NSDictionary的子类 * NSDictionary是不可变的, 一旦初始化完毕后, 它里面的内容就永远是固定的, 不能删除里面 的元素, 也不能再往里面添加元素 * NSMutableDictionary是可变的, 随时可以往里面添加\更改\删除元素
7> NSMutableDictionary的常见操作
- (void)setObject:(id)anObject forKey:(id <NSCopying>)aKey; 添加一个键值对(会把aKey之前对应的值给替换掉), 等价于: dict[@"name"] = @"Jack";
- (void)removeObjectForKey:(id)aKey; 通过aKey删除对应的value
- (void)removeAllObjects; 删除所有的键值对
//通过dictionary属性快速初始化一个NSMutableDictionary dict.dictionary = @{@"name" : @"bob", @"age" : @"18"};
8> 总结 * NSArray和NSDictionary的区别 1> NSArray是有序的,NSDictionary是无序的 2> NSArray是通过下标访问元素,NSDictionary是通过key访问元素
* NSArray的用法
1> 创建 @[@"Jack", @"Rose"] (返回是不可变数组)
2> 访问 id d = array[1];
3> 赋值 array[1] = @"jack";
* NSDictionary的用法
1> 创建
@{ @"name" : @"Jack", @"phone" : @"10086" } (返回是不可变字典)
2> 访问 id d = dict[@"name"];
3> 赋值 dict[@"name"] = @"jack";
NSValue的介绍和使用
NSValue包装对象指针,CGRect结构体等 一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器。它可以保存任意类型的数 据,比如int,float,char,当然也可以是指pointers, structures, and object ids。NSValue 类的目标就是允许以上数据类型的数据结构能够被添加到集合里,例如那些需要其元素是对象的 数据结构,如NSArray或者NSSet的实例。需要注意的是NSValue对象一直是不可枚举的。
为了方便 结构体 和 NSValue 的转换, Foundation 供了以下方法 将结构体包装成NSValue对象 -------> 存储结构体到集合中 + (NSValue *)valueWithPoint:(NSPoint)point; + (NSValue *)valueWithSize:(NSSize)size;
+ (NSValue *)valueWithRect:(NSRect)rect;
从NSValue对象取出之前包装的结构体 - (NSPoint)pointValue; - (NSSize)sizeValue; - (NSRect)rectValue;
1、+ (NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type; 创建一个NSValue
value:对象地址 objCType:通常是一个用来 述对象类型和大小的字符串,@encode可以接受一个数据类型 的名称自动生成一个合适的 述字符串
2、- (void)getValue:(void *)value(出参);
从接受value的对象中 取数值 取的数值,存放在这个指针所指向的内存块里。
typedef struct { int year;
int month;
int day; } Date;
Date d = {2015, 2, 1}; // 将结构体d包装成NSValue对象
NSValue *dValue = [NSValue valueWithBytes:&d objCType:@encode(Date)]; NSArray *array = @[dValue];
// 取出value之前包装的结构体数据 Date newD; [dValue getValue:&newD];
相关文章推荐
- SDUT 叶子问题
- 使用指针形式 为数组随机赋值,并进行冒泡排序
- linux:sort命令
- Linux程序设计 读笔1
- 获取文件扩展名
- AngularJs ngChange、ngChecked、ngClick、ngDblclick
- 白云机场查获具有充电宝功能的时尚女包
- EM算法和MM算法
- 大道至简-从编程到过程读后感
- muduo TcpServer粗略过程
- ios-(Xib的使用) 工作随笔
- 充电多面手:不一样的光伏充电宝
- spring文件
- auto extern static register
- NSFileManager 沙盒文件管理
- 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)
- 数据库中GUID的生成
- const关键词
- Openwrt从零开始(一)
- 杭电ACM1151