第三章、一些基本数据结构使用和解析(iOS学习笔记,从零开始。)

来源:互联网 发布:网络信息安全防护体系 编辑:程序博客网 时间:2024/05/01 18:38

NSString

1)rangeOfString:截取指定字符串的长度;

NSRange rRange = [newEmotiontextrangeOfString:seperateroptions:NSNEXTSTEPStringEncodingrange:pointer];

2) substringToIndex:7:截取从0 索引到指定索引(7)长度的字符串

3) substringFromIndex:9:截取从指定索引(9)到末尾长度的字符串

4) NSRange range = NSMakeRange(0,7);截取从指定索引(0)到指定(7)长度的字符串

5) substringWithRange:range:截取从指定索引(0)到指定(7)长度的字符串

6)   isEqualToString:@"p://www":比较字符串包含关系,区分大小写

7)   stringWithFormat:格式化字符串。

8)stringByAppendingString: 

NSString* str2 = @"";//必须初始化才行,不然没有效果的

str2 = [str1 stringByAppendingString:@","];


9)去空格

NSString*cleanString = [text stringByTrimmingCharactersInSet:[NSCharacterSetwhitespaceAndNewlineCharacterSet]];

NSString和c++ string互转

9)  c++ string转NSString 

string str = [aNSString UTF8String];

10)NSString转c++ string

string str("testStr");//前提是这个string是以utf-8编码的

NSString * aString = [NSString stringWithUTF8String:str.c_str()];


NSData

iOS 头文件中NSData的定义如下:说明这是一个缓冲区。

包含首地址和长度,那么跟NSString相比的话,NSData像是NSString的游标。

可以获取任意长度的内容,但是NSData本身没有存储实质内容。


@interface NSData :NSObject <NSCopying,NSMutableCopying,NSCoding>


- (NSUInteger)length;

- (constvoid *)bytes;


@end


下面是一些转换逻辑

    //1.NSString 转换成NSData对象

    NSData* data =  [@"testdata"dataUsingEncoding:NSUTF8StringEncoding];

    //2.NSData转换成NSString

    NSString* result = [[NSStringalloc]initWithData:data encoding:NSUTF8StringEncoding];

    //3.NSData转换成char*这个应该最简单

   char *test = (char*)[data bytes];

    //4.char*转换成NSData对象

   Byte* tempData =malloc(sizeof(Byte)*16);

   NSData* content = [NSDatadataWithBytes:tempDatalength:16];


NSIndexPath

NSIndexPath是一个对象,它用来表示一个树形的记录地址。

比如下图1:



Method

+(id) indexPathWithIndex:(NSUIInterger) index,创建一个节点的indexPath。

+(id)indexPathWithIndex:(NSUIInterger*)indexs Length:(NSUIInterger)Length.

其中,indexs是一个数组,用来出事后indexpath对象,length是深度,即数组的长度。

如何使用: 

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];

第一次看到NSIndexPath是在UITableView的实例中,请参考我的博文 http://blog.csdn.net/hherima/article/details/8628829

       查看UITableView的帮助文档我们会注意到UITableView有两个Delegate分别为:dataSource和delegate。

  dataSource 是UITableViewDataSource类型,主要为UITableView提 供显示用的数据(UITableViewCell),指定UITableViewCell支持的编辑操作类型(insert,delete和 reordering),并根据用户的操作进行相应的数据更新操作,如果数据没有更具操作进行正确的更新,可能会导致显示异常,甚至crush。

  delegate 是UITableViewDelegate类型,主要提供一些可选的方法,用来控制tableView的选择、指定section的头和尾的显示以及协助完成cell的删除和排序等功能。

  提到UITableView,就必须的说一说NSIndexPath。UITableView声明了一个NSIndexPath的类别,主要用 来标识当前cell的在tableView中的位置,该类别有section和row两个属性,前者标识当前cell处于第几个section中,后者代 表在该section中的第几行。


NSURL

        NSURL其实就是我们在浏览器上看到的网站地址,这不就是一个字符串么,为什么还要在写一个NSURL呢,主要是因为网站地址的字符串都比较复杂,包括很多请求参数,这样在请求过程中需要解析出来每个部门,所以封装一个NSURL,操作很方便:


[cpp] view plaincopy
  1. NSURL *url = [NSURL URLWithString:@"http://www.baidu.com/s?tn=baiduhome_pg&bs=NSRUL&f=8&rsv_bp=1&rsv_spt=1&wd=NSurl&inputT=2709"];  
  2.       
  3.     NSLog(@"Scheme: %@", [url scheme]);  
  4.       
  5.     NSLog(@"Host: %@", [url host]);  
  6.       
  7.     NSLog(@"Port: %@", [url port]);  
  8.       
  9.     NSLog(@"Path: %@", [url path]);  
  10.       
  11.     NSLog(@"Relative path: %@", [url relativePath]);  
  12.       
  13.     NSLog(@"Path components as array: %@", [url pathComponents]);  
  14.       
  15.     NSLog(@"Parameter string: %@", [url parameterString]);  
  16.       
  17.     NSLog(@"Query: %@", [url query]);  
  18.       
  19.     NSLog(@"Fragment: %@", [url fragment]);  
  20.       
  21.     NSLog(@"User: %@", [url user]);  
  22.       
  23.     NSLog(@"Password: %@", [url password]);  

结果:

[cpp] view plaincopy
  1. 2012-08-29 15:52:23.781 NSurl[3560:f803] Scheme: http  
  2. 2012-08-29 15:52:32.793 NSurl[3560:f803] Host: www.baidu.com  
  3. 2012-08-29 15:52:39.102 NSurl[3560:f803] Port: (null)  
  4. 2012-08-29 15:52:42.590 NSurl[3560:f803] Path: /s  
  5. 2012-08-29 15:52:52.516 NSurl[3560:f803] Relative path: /s  
  6. 2012-08-29 15:53:05.576 NSurl[3560:f803] Path components as array: (  
  7.     "/",  
  8.     s  
  9. )  
  10. 2012-08-29 15:53:32.861 NSurl[3560:f803] Parameter string: (null)  
  11. 2012-08-29 15:53:37.528 NSurl[3560:f803] Query: tn=baiduhome_pg&bs=NSRUL&f=8&rsv_bp=1&rsv_spt=1&wd=NSurl&inputT=2709  
  12. 2012-08-29 15:53:52.942 NSurl[3560:f803] Fragment: (null)  
  13. 2012-08-29 15:53:54.539 NSurl[3560:f803] User: (null)  
  14. 2012-08-29 15:53:57.808 NSurl[3560:f803] Password: (null)  

NSClassFromString


NSClassFromString是一个很有用的东西,尤其在进行iPhone toolchain的开发上。

正常来说,

id myObj = [[NSClassFromString(@"MySpecialClass") alloc] init];和id myObj = [[MySpecialClass alloc] init];是一样的。

但是,如果你的程序中并不存在MySpecialClass这个类,下面的写法会出错,而上面的写法只是返回一个空对象而已。

因此,在某些情况下,可以使用NSClassFromString来进行你不确定的类的初始化。

比如在iPhone中,NSTask可能就会出现这种情况,所以在你需要使用NSTask时,最好使用:

[[NSClassFromString(@"NSTask") .....]] 而不要直接使用[NSTask ...]这种写法。

NSClassFromString的好处是:

1 弱化连接,因此并不会把没有的Framework也link到程序中。

2 不需要使用import,因为类是动态加载的,只要存在就可以加载。因此如果你的toolchain中没有某个类的头文件定义,而你确信这个类是可以用的,那么也可以用这种方法。



原创粉丝点击