zoukankan      html  css  js  c++  java
  • NSString基本概念

    1.NSString基本概念

    • 什么是NSString?

      • 一个NSString对象就代表一个字符串(文字内容)
      • 一般称NSString为字符串类

    2.NSString创建方式

    • 最直接的方式(常量字符串)
      • 常量区中的字符串只要内容一致, 不会重复创建
    NSString *str1 = @"lnj";
    NSString *str3 = @"lnj";
    NSLog(@"str1 = %p, str3 = %p", str1, str3);
    输出地址一致
    • 格式化的方式

        堆区中得字符串哪怕内容一致, 也会重复创建

    NSString *str2 = [NSString stringWithFormat:@"lnj"];
    NSString *str4 = [NSString stringWithFormat:@"lnj"];
    NSLog(@"str2 = %p, str4 = %p", str2, str4);
    输出地址不一样
    
     NSString *str2 = [[NSString alloc] initWithFormat:@"height is %f". 1.75];
    //
    //  main.m
    //  NSString基本概念
    
    
    #import <Foundation/Foundation.h>
    
    int main(int argc, const char * argv[]) {
    
        //如何创建字符串对象
        /*
         通过不同的方式创建字符串,字符串对象储存的位置也不一样
         >如果是通过字符串常量创建,那么字符串对象存储在常量区中
         >如果是通过alloc initWithFormat/stringWithFormat创建,那么字符串对象存储在堆区中
         而且需要注意:
         >不同的平台存储的方式也不一样,如果是Mac平台系统会自动对字符串对象进行优化,但是如果是iOS平台就是两个对象
         >不同的编译器存储的方式也不一样,如果是Xcode6以下并且是在iOS平台,那么每次alloc都会创建一个新的对象,如果是在Xcode6以上那么alloc多次指向同一块存储空间
         
         */
        
        //1.通过字符串常量创建
        //注意:如果是通过字符串常量创建对象,并且字符串常量的内容一致,那么如果创建多个字符串对象,多个对象指向同一块存储空间
        NSString *str1 = @"lnj";
        NSString *str11 = @"lnj";
        NSLog(@"str1 = %p, str11 = %p", str1 ,str11);
        
        //2.通过alloc init创建
        //只要调用alloc就会在堆内存中开辟一块存储空间
        NSString *str2 = [[NSString alloc]initWithFormat:@"lmj"];
        NSString *str22 = [[NSString alloc]initWithFormat:@"lmj"];
        NSLog(@"str2 = %p, str22 = %p", str2, str22);
        
        //3.通过类工厂方法创建/ stringWithFormat
        //内部其实就是封装了alloc init
        NSString *str3 = [NSString stringWithFormat:@"zs"];
        NSString *str33= [NSString stringWithFormat:@"zs"];
        
        /*
         注意:一般情况下,只要是通过alloc或者类工厂方法创建的对象,每次都会在堆内存中开辟一块新的存储空间
         但是如果是通过alloc的initWithString方法除外,因为这个方法是通过copy返回一个字符串对象给我们
         而copy又分为深拷贝和浅拷贝,如果是深拷贝会创建一个新的对象,如果是浅拷贝不会创建一个新的对象,而是直接返回被拷贝的对象的地址给我们
         */
        
        NSString *str4 = [[NSString alloc]initWithString:@"ls"];
        NSString *str44 = [[NSString alloc]initWithString:@"ls"];
        NSLog(@"str4 = %p, str44 = %p", str4, str44);
    
        return 0;
  • 相关阅读:
    MySQL学习之EXPLAIN执行计划详解及最佳实践
    MySQL学习之Mysql锁&事务隔离级别
    Mybatis学习之核心原理代码详解
    Mybatis学习之工作流程代码详解
    Mybatis学习之核心配置详解
    Mybatis学习之Mybatis Demo入门使用
    缓存穿透解决方案之布隆过滤器(Bloom Filter)原理及Guava中的实现
    Zookeeper学习之Jute序列化以及通信协议详解
    Zookeeper学习之Zab一致性协议
    Zookeeper学习之ZooKeeper源码分析
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6613705.html
Copyright © 2011-2022 走看看