适合有java 和C基础的同学迅速了解OC
- #import <Foundation/Foundation.h>
- #include <stdio.h>
- /*
- 1>利用C生成一个文本文件,后再读取保存为Cstr,
- 将Cstr转成OCstr后修改字符串中的内容,再利用OC字符串方法
- 将新OCstr写入文件,后利用OC字符串方法读取该文件打印;
- 2>利用OC字符串中方法读取网页,并计算网页中内容有多少行
- */
- int main()
- {
- //function declaration
- char * cTextFileOperation(char * path,char *content);
- NSString * ocTextFileOpertaion(NSString * path,
- NSString *del,NSString *append,NSString *src);
- int countWebPageLine(NSURL* url);
-
-
- char *fileName="aaa.txt";
- char *cStr=cTextFileOperation(fileName,"1>USE C LAGUAGE TO WRITE TEXT TO FILE OVER\n");
-
- printf("C读取文件内容为:\n%s\n",cStr);
-
- NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
-
- // 将Cstr转换成OCstr
- NSString * ocStr=ocTextFileOpertaion(
- [NSString stringWithUTF8String:fileName],
- @"OVER",@"2>利用NSString方法写入的字符串\n",
- [NSString stringWithUTF8String:cStr]);
-
- NSLog(@"\nNSString方式读取文件内容为:\n%@",ocStr);
-
- // OCstr转换成Cstr
- char *cStr2=[ocStr UTF8String];
- // 若系统编码方式非UTF8,中文讲打印乱码
- printf("NSString方式读取文件内容转成char *后为:\n%s\n",cStr2);
-
- //读取网页内容
- NSURL *url=[NSURL URLWithString:@"http://www.baidu.com"];
- int line=countWebPageLine(url);
-
- NSLog(@"\n%@页面内容有%d行",url,line);
-
-
- [pool drain];
-
- free(cStr);//malloc分配的内存需要手动回收
- return 0;
- }
- // 利用OC字符串中方法读取网页,并计算网页中内容有多少行
- int countWebPageLine(NSURL* url)
- {
- NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
-
- //非使用类方法创建的需要调用autorelease
- //NSString *str=[[[NSString alloc] initWithContentsOfURL:url
- // encoding:NSUTF8StringEncoding error:0] autorelease];
-
- NSString *str=[NSString stringWithContentsOfURL:url
- encoding:NSUTF8StringEncoding error:0];
-
-
- int count=0,i,len=[str length];
- //unichar为无符号双字节
- unichar uc;
- for(i=0;i<len;i++)
- {
- uc=[str characterAtIndex:i];
- if(uc=='\n')count++;
- }
-
- [pool drain];
- return count;
- }
- // 修改字符串中的内容,再利用OC字符串方法
- // 将新OCstr写入文件,后利用OC字符串方法读取该文件打印;
- NSString * ocTextFileOpertaion(NSString * path,
- NSString *del,NSString *append,NSString *src)
- {
-
- NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
-
- //使用类方法创建的系统类,基本都为autorelease过的
- // 按照src创建一个可变字符串
- NSMutableString *mstr=[NSMutableString stringWithString:src];
-
- // 可变字符串可对字符串进行增删改
- // 获取“结束”在字符串中的位置,以单字节计算,汉子占两字节
- NSRange range=[mstr rangeOfString:del];
- NSLog(@"\nrange=%@",NSStringFromRange(range));
- //删除字符串该位置上的字符串前先判断原字符串中是否有该字符串
- if(range.location!=NSNotFound&&range.length!=0)
- [mstr deleteCharactersInRange:range];
-
- [mstr appendFormat:append];
- //将新的字符串写入文件
- BOOL b=[mstr writeToFile:path atomically:1
- encoding:NSUTF8StringEncoding error:0];
- NSLog(@"\n写入文件结果=%d",b);
-
- // 需要返回的OCstr需retain,否则被释放池release后将deallocated
- NSString *str=[[NSString stringWithContentsOfFile:path
- encoding:NSUTF8StringEncoding error:0] retain];
-
- [pool drain];
- // 返回前先调用autorelease,方法外无需再管理
- return [str autorelease];
- }
- //利用C生成一个文本文件,后再读取保存为Cstr
- char * cTextFileOperation(char * path,char *content)
- {
- FILE *fp;
- if((fp=fopen(path,"w+"))==0)
- {
- printf("打开文件失败\n");
- getchar();
- exit(1);
- }
- fprintf(fp,content);
- fseek(fp,0,0);//文件读取指针移至文件开始位置
- //函数中定义需要返回的数组,使用malloc创建,
- //否则函数结束后,数组所在内存将被回收
- //char buf[200];
- char * buf=(char *)malloc(200);
- int ind=0;
- char c;
- while((c=fgetc(fp))!=-1)
- buf[ind++]=c;
- buf[ind]=0;
-
- fclose(fp);
- return buf;
-
- }
复制代码
概括:
NSString为不可变字符串,即无法进行增删改操作,其子类NSMutableString为可变
NSString 常用方法:
常用的创建方法:
注:为方便类的创建,OC中系统自带类的构造方法大都会有一个与之对应的类方法,
非ARC机制下,一般返回autorelease过的对象,
该类方法的命名规范为将init替换为类名去前缀;
// 按格式创建
-(id)initWithFormat:(NSString *)format ...;
+(id)stringWithFormat:(NSString *)format ...;
// 将传入的OCstr转换为另一个OCstr,一般用与将NSString转换为NSMutableString
-(id)initWithString:(NSString *)str;
+(id)stringWithString:(NSString *)str;
//将Cstr转成OCstr字符串
-(id)initWithUTF8String:(char *) cstr;
+(id)stringWithUTF8String:(char *)cstr;
//从文件中读取内容保存为OCstr
-(id)initWithContentsOfFile:(NSString *)path
encoding:(NSStringEncoding)encoding error:(NSError *__autoreleasing*)error;
+(id)stringWithContentsOfFile:(NSString *)path
encoding:(NSStringEncoding)encoding error:(NSError *__autoreleasing*)error;
//从URL中读取内容保存为OCstr
-(id)initWithContentsOfURL:(NSURL *) url
encoding:(NSStringEncoding)encoding error:(NSError *__autoreleasing*)error;
+(id)stringWithContentsOfURL:(NSURL *) url
encoding:(NSStringEncoding)encoding error:(NSError *__autoreleasing*)error;
//将OCstr转换成Cstr
- (char *)UTF8String;
// 找出subStr在字符串中的位置,没找到返回NSRange中
//location=NSNotFound(即-1),length=0
-(NSRange)rangeOfString:(NSString *)subStr;
//将OCstr写到文件,atomically表示写入过程出问题是否撤销已经写入的内容
-(BOOL)writeToFile:(NSString *)path atomically:(BOOL)b
encoding:(NSStringEncoding)encoding error:(NSError *__autoreleasing*)error;
//将OCstr写到URL
-(BOOL)writeToURL:(NSURL *)url atomically:(BOOL)b
encoding:(NSStringEncoding)encoding error:(NSError *__autoreleasing*)error;
// 在一字符串末尾拼接字符串,返回拼接后的新字符串,原字符串不变
-(NSString *)stringByAppendingString:(NSString *)append;
//返回字符串中字符数
-(unsigned int)length ;
//返回字符串中下标为i的Unicode字符 (unichar 为无符号两字节)
-(unichar) characterAtIndex:i;
// 截取从字符串下标i开始到字符串结束的新字符串后返回
-(NSString *)substringFromIndex:i;
// 截取从字符串开始位置到下标i位置的新字符串后返回
-(NSString *)substringToIndex:i;
NSMutableString 常用方法:
// 在字符串末尾拼接字符串,原字符扩展为拼接后的字符串
- (void)appendString:(NSString *)append;
// 在字符串末尾拼接格式字符串
-(void)appendFormat:(NSString *)format ...;
// 删除字符串中某范围的字符串
-(void)deleteCharactersInRange:(NSRange)range;
编码方式枚举:NSStringEncoding
typedef enum _NSStringEncoding{
..,NSUTF8StringEncoding,.......
} NSStringEncoding;
URL:
格式:
协议头://路径
例:
本地文件 file://path
ftp文件 ftp://path
网络文件 http://path
创建方法:
NSURL *url1=[[NSURL alloc] initWithString:@"file:///home/XX"];
NSURL *url2=[NSURL URLWithString:@"file:///home/XX"];
|
|