//
// main.m
// Foundation框架(2)-NSString
//
// Created by Mac on 15-1-18.
// Copyright (c) 2015年 vxinyou. All rights reserved.
//
#import
#pragma mark 字符串的创建
void stringCreate(){
// C语言中的字符串
char *s = "helloworld";
// 方式一:通过这种方式创建出来的字符串是不需要释放的
NSString *str1 = @"helloworld";
// 方式二:下面这种方式创建的字符串是需要释放的
NSString *str2 = [[NSString alloc] init];
str2 = @"hellowrold";
[str2 release];
// 方式三:initWithString.需要释放
NSString *str3 = [[NSString alloc] initWithString:@"hellowrold"];
[str3 release];
// 方式四:静态方法stringWithString.不需要释放,相当于方式三的静态形式
NSString *str4 = [NSString stringWithString:@"helloworld"];
// 方式五:initWithUTF8String.需要释放
NSString *str5 = [[NSString alloc] initWithUTF8String:"hellowrold"];
[str5 release];
// 方式六:静态方法stringWithUTF8String.不需要释放,相当于方式五的静态形式
NSString *str6 = [NSString stringWithUTF8String:"helloworld"];
// 方式七:initWithFormat.需要释放
NSString *str7 = [[NSString alloc] initWithFormat:@"my name is %@, age is %i, height is %.2f", @"Jordan", 25, 1.98f];
NSLog(@"%@", str7);
[str7 release];
// 方式八:静态方法stringWithFormat.不需要释放,相当于方式七的静态形式
NSString *str8 = [NSString stringWithFormat:@"my name is %@, age is %i, height is %.2f", @"Kobe", 36, 1.98f];
NSLog(@"%@", str8);
}
#pragma mark 错误演示
void stringError(){
NSString *str1 = [[NSString alloc] initWithString:@"helloworld"];
NSLog(@"%@", str1);
// 这句代码放在这里会造成两个错误:
// 1,前面创建的字符串"hellowrold"没有被释放,造成内存泄露
// 2,后面创建的字符串"new string"释放过度,造成野指针错误
// 应该把这句代码放到[str1 release]后面
// str1 = [NSString stringWithString:@"new string"];
[str1 release];
str1 = [NSString stringWithString:@"new string"];
NSLog(@"%@", str1);
}
void changeStr(NSString *str){
str = @"456";
}
void changeStr2(NSString **str){
*str = @"789";
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
// stringCreate();
// stringError();
NSString *str = @"123";
changeStr(str);
NSLog(@"%@", str);// 打印结果:123,说明指针变量str并没有改变其指向
changeStr2(&str);
NSLog(@"%@", str);// 打印结果:789,说明s指针变量tr改变了指向
}
return 0;
}