博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Objective-C 基础(五)
阅读量:4657 次
发布时间:2019-06-09

本文共 4592 字,大约阅读时间需要 15 分钟。

申请、使用字符串

使用NSString和NXMutableString类 

NSString和NXMutableString类允许你把一串字符存到内存中。NSString类是不能更改的,NSString类一

旦被创建,内容就不能被修改了。可变字符串NSMutableString创建以后还可以被修改
通过这两个类实例的length 方法可获取内容长度 ,

通过实例对象的 integerValue,  floatValue,  和doubleValue 方法来获取int  ,float 或double 类型值

如果打算使用C语言库里的字符串,就不需要使用@符号,用NSString的UTF8String可把NSString 转为C语言库里的字符串类型,

const char *cString = [@"Objective-C String" UTF8String];

NSLog(@"cString = %s", cString);

要把一个C字符串转换成NSString,必须使用NSString类的stringWithUTF8String:方法

NSString *objectString = [NSString stringWithUTF8String:"C String"]; 

 

查找一个字符串内容在另一个字符串里面所在的范围,用NSRange结构

NSString *haystack = @"My Simple String";

NSString *needle = @"Simple";
NSRange range = [haystack rangeOfString:needle];
if (range.location == NSNotFound){
/* Could NOT find needle in haystack */
} else {
/* Found the needle in the haystack */
NSLog(@"Found %@ in %@ at location %lu",
needle,
haystack,
(unsigned long)range.location);
}

如果你在查询字符串上拥有更多控制权的话,你可以使用rangeOfString:options:方法。其中options参数是

NSStringCompareOptions类型的。
enum {
NSCaseInsensitiveSearch = 1,
NSLiteralSearch = 2,
NSBackwardsSearch = 4,
NSAnchoredSearch = 8,
NSNumericSearch = 64,
NSDiacriticInsensitiveSearch = 128,
NSWidthInsensitiveSearch = 256,
NSForcedOrderingSearch = 512,
NSRegularExpressionSearch = 1024
};

枚举中的这些值是可以一起使用的。这表示你可以用OR操作符(|字符)连接它们

可变字符串和不可变字符串是相似的。不同的是可变字符串可以在运行时被修改,可以使用appendString,replaceOccurrencesOfString 等来修改字符串内容;

 

申请、使用数字

用NSNumber类来用面向对象的方法处理数字。如果你只需要简单的数字(而不是对象),用NSInteger

类来操作有符号数(正数或者负数),用NSUInteger类来操作无符号数(正数或0),用CGFloat类和double
操作浮点数

 NSNumber实例的方法

 

numberWithInteger:

将一个整型值封装成一个NSNumber实例
numberWithUnsignedInteger:
将一个无符号整型值(正数或零)封装成一个NSNumber实例
numberWithFloat:
将一个浮点数封装成一个NSNumber实例
numberWithDouble:
将一个double类型的数封装成一个NSNumber实例

如:NSNumber *signedNumber = [NSNumbernumberWithInteger:-123456]; 

下面这些方法用来从一个NSNumber实例提取纯数字:

integerValue
从调用该函数的NSNumber实例中返回一个整型NSInteger类型值。
unsignedIntegerValue
从调用该函数的NSNumber实例中返回一个无符号整型NSUInteger类型值。
floatValue
从调用该函数的NSNumber实例中返回一个浮点数CGFloat类型值。
doubleValue
从调用该函数的NSNumber实例中返回一个双精度double类型值

 

要将一个无符号整型转换为NSString,你可以用%lu格式

NSNumber *unsignedNumber = [NSNumber numberWithUnsignedInteger:123456]; 

NSString *numberInString =

[NSStringstringWithFormat:@"%lu",
(unsigned long)[unsignedNumberunsignedIntegerValue]];
NSLog(@"numberInString = %@", numberInString);

需要注意的是NSNumber类的任何一个以numberWith 开头的方法都返回一个自动释放的NSNumber对

象。

 

分配、使用数组

用NSArray和NSMutableArray类把多个对象存储到操作相对更加方便的数组中

你可以把任何NSObject类或者它子类的对象放到NSArray类型中

NSArray和NSMutableArray的主要区别是NSMutableArray可以在分配空间和初始化之后修改,然而

NSArray不可以被修改

用initWithObjects:来初始化NSArray,并在最后放入一个nil, 

也可以用NSArray类的arrayWithObjects:方法来创建一个可自动释放的数组

可以调用数组的count方法类得到数组中的对象个数

可以用 objectAtIndex:方法来获得一个指定位置的对象

NSMutableArray 可通过addObject、removeObject、addObjectsFromArray等来增删对象

简单的利用NSArray 或NSMutableArray类的基于块对象的排序方法。需要

注意的是NSArray类的排序方法返回一个新的额NSArray实例,原来的数组没有改变。这是因为NSArray一
旦初始化之后就不能被改变,然而排序是要改变一个数组的。相对应的,NSMutableArray 类的排序方法返回
的就是要排序的数组,而不会返回一个新的数组

 

 

分配和使用 Dictionaries

NSNumber *age = [NSNumber numberWithUnsignedInteger:51];

NSDictionary *person = [[NSDictionary alloc] initWithObjectsAndKeys:
@"Anthony", @"First Name",
@"Robbins", @"Last Name",
age, @"Age",
nil];
NSLog(@"First Name = %@", [person objectForKey:@"First Name"]);
NSLog(@"Last Name = %@", [person objectForKey:@"Last Name"]);
NSLog(@"Age = %@", [person objectForKey:@"Age"]);
The results will then be printed out as shown here:
First Name = Anthony
Last Name = Robbins
Age = 51

用值和键的对儿初始化dictionary

NSDictionary对应的可改变

dictionary类NSMutableDictionary在分配内存和初始化之后可以被修改。例如,如果在dictionary初始化之后
想从其中删除Age 这个key对应的对象

可以采用dictionary的allKeys方法来得到dictionary所有的key,或者 enumerateKeysAndObjectsUsingBlock,或者用keyEnumerator来获得一个NSEnumerator对象

for (id keyInDictionary in [person allKeys]){

idobjectForKey = [person objectForKey:keyInDictionary];
NSLog(@"Key = %@, Object For Key = %@", keyInDictionary, objectForKey);
}

NSEnumerator *keys = [person keyEnumerator];

id keyInDictionary = nil;
while ((keyInDictionary = [keys nextObject]) != nil){
  id objectForKey = [person objectForKey:keyInDictionary];
  NSLog(@"Key = %@, Object For Key = %@", keyInDictionary, objectForKey);

使用一个可变dictionary的keyEnumerator方法时,不允许在遍历key的过程中改变dictionary中key对应

的值. 如果你记得的话,可变的arrays也有同样的规则

 

 分配和使用Sets

Sets 和 array非常相似。二者最大的区别就是sets中相同对象只能被添加一次。当你第二次添加同一个对

象时,sets会拒绝添加

用NSSet类表示不可改变的sets,用NSMutableSet类表示可变,一个set 不仅仅比较对象在内存中的位置,而且比较这些对象的内容,通过NSMutableSet 类的addObject:方法类像set 添加一个新的对象。你也可以用removeObject 方法来删除对象

用count方法来获得set中的对象个数。也可以用allObjects方

法来获得set中包含所有对象的数组

如果想在set中获取一个对象,调用set的anyObject方法。就像函数名代表的,这个函数返回set中一个

随机的对象。如果set为空,则返回空

转载于:https://www.cnblogs.com/ivancoding/archive/2013/02/08/2890942.html

你可能感兴趣的文章
iOS开发UI篇—transframe属性(形变)
查看>>
3月7日 ArrayList集合
查看>>
jsp 环境配置记录
查看>>
Python03
查看>>
LOJ 2537 「PKUWC2018」Minimax
查看>>
使用java中replaceAll方法替换字符串中的反斜杠
查看>>
Some configure
查看>>
流量调整和限流技术 【转载】
查看>>
1 线性空间
查看>>
VS不显示最近打开的项目
查看>>
DP(动态规划)
查看>>
chkconfig
查看>>
2.抽取代码(BaseActivity)
查看>>
夏天过去了, 姥爷推荐几套来自smashingmagzine的超棒秋天主题壁纸
查看>>
反射的所有api
查看>>
css 定位及遮罩层小技巧
查看>>
[2017.02.23] Java8 函数式编程
查看>>
sprintf 和strcpy 的差别
查看>>
JS中window.event事件使用详解
查看>>
ES6深入学习记录(一)class方法相关
查看>>