Foundation框架(2)——NSString的创建、常见错误、改变指针变量的指向

//
//  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;
}

    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值