文档章节

ios常用的字符串NSString自动释放理解

Domineering
 Domineering
发布于 2015/02/05 09:27
字数 588
阅读 50
收藏 0


最近在做程序的时候,突然发现对于NSString的理解还是存在问题的。因此补充一片blog,希望对刚刚进入OC开发并搞不清楚内存泄露问题的人一点指引。

 

赋值:

 

NSString * str = @"123";   // 这段代码的含义其实就是附一个常量给str,该部分由系统自动管理,不需要release释放,是会autorelease的。

NSString * str = [[NString alloc] initWithString :@"111"]; // 这种写法本身存在问题,因为这个代码的含义是说给str附一个常量,因此会被编译器优化,因此也是不需要release的,尽管有alloc出现。

NSString * str = [[NSString alloc] initWithFormat:@"123"] ;// 必须要进行release才可以,因为这样就会导致内存泄露。

NSString * str = [[NSString stringWithFormat:@"111"];// 则个不需要release,也不会产生内存泄露,因为该部分调用的是系统的类方法,也就是会autorelease。这种方法其实也被称之为临时的变量使用方法。

 

补充一点内容:

 

1、initWithFormat是实例方法

只能通过 NSString* str = [[NSString alloc] initWithFormat:@"%@",@"Hello World"] 调用,但是必须手动release来释放内存资源

2、stringWithFormat是类方法

可以直接用 NSString* str = [NSString stringWithFormat:@"%@",@"Hello World"] 调用,内存管理上是autorelease的,不用手动显式release

 

经常在uilable的填写中,使用到字符串,因此也就非常容易造成内存泄露。比较正确的方法如下两种:

 

 

 

解决办法有二个:

1、

NSString * str = [[NSString alloc] initWithFormat:@"%@",@"abc"];

label.text = str;

[str release]

最后在dealloc中再[label release]

2、

label.text = [NSString stringWithFormat:@"%@",@"abc"];

另外,对于函数调用,也会经常用到nsstring作为一个返回值。因此一个比较正确的函数的处理方法如下:

 

 

一个方法,返回一个NSString对象,在事件中调用方法.并尝试release 方法返回的NSString对象.

  1. <span style="color:#454545">-(NSString*) createNewString{  
  2.     //情况1 -</span><span style="color:#ff0000">- 需要自己释放</span><span style="color:#454545">。  
  3.     return [[[NSString alloc] initWithFormat:@"%@",@"1223344"] autorelease];  
  4.    //情况2  -</span><span style="color:#ff0000">- 系统自动释放。 这种方法因为不安全,并且存在含义模糊的情况,不建议使用。</span><span style="color:#454545">  
  5.     return [[[NSString alloc] initWithString:@"1223344"] autorelease];  
  6.    // 情况3 -</span><span style="color:#ff0000">- 系统自动释放。</span><span style="color:#454545">  
  7.    return @"1223344";  
  8. }</span>  
  9. 原文http://blog.csdn.net/dongdongdongjl/article/details/8471995

本文转载自:

Domineering
粉丝 7
博文 169
码字总数 51069
作品 0
深圳
私信 提问
Objective-C与JavaScript的交互

UIWebView是iOS最常用的SDK之一,它有一个stringByEvaluatingJavaScriptFromString方法可以将 javascript嵌入页面中,通过这个方法我们可以在iOS中与UIWebView中的网页元素交互。 UIWebView是...

长平狐
2013/03/19
114
0
iOS中,对象释放机制以及__weak、__unsafe_unretained的一些问题

iOS中,首先有一点可以确认的,就是weak修饰的,在持有或者引用为0的时候,为自动将对象nil,iOS中对于一个nil发消息是不会发生崩溃等问题的,而unsafeunretained则不然,他不会销毁置为nil,因...

RainOrz
2018/06/26
52
0
经过阿里,百度一面,二面后,我总结了50道iOS面试题

前言: 金三银四已经过去,根据统计,很多人都会选择在三月四月跳槽,原因有很多,企业年后会有大量员工离职,员工觉得老公司待遇不怎么样?薪资不够高,想换个新环境等等原因,所以,三月四...

原来是泽镜啊
2018/05/04
15
0
iOS深入学习:华丽的#define

我建了一个iOS开发QQ交流群:188647173,大家可以一起来相互学习。 还有一个群里面大神的个人站点www.mylonly.com,大家有不会的可以向他请教。 本片博客参考CocoaChina上面的文章,对内容进...

召唤攻城狮
2014/04/18
1K
0
iOS中UIWebView的使用详解

iOS中UIWebView的使用详解 一、初始化与三种加载方式 UIWebView继承与UIView,因此,其初始化方法和一般的view一样,通过alloc和init进行初始化,其加载数据的方式有三种: 第一种: - (voi...

珲少
2015/06/23
44.4K
1

没有更多内容

加载失败,请刷新页面

加载更多

kail 树莓派中文字体设置

1修改源信息 vi /etc/apt/sources.list 将原有源信息注释,替换为以下任意源信息 #中科大deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contribdeb-src http://mirr...

飞翔的白云
4分钟前
1
0
关于[Warning] IPv4 forwarding is disabled. Networking will not work的报错处理

在Linux虚拟机中操作Docker ,构建Docker镜像时出现报错 \[Warning\] IPv4 forwarding is disabled. Networking will not work 处理办法: 修改/etc/sysctl.conf文件,添加 net.ipv4.ip_fo...

芥末无敌
6分钟前
1
0
Redis

red

天空飘来五个字儿
6分钟前
2
0
Python学习笔记--传值和传地址

写了下面四个函数: def ChangeInt(num): #改变整数为-1 num = -1a = 1ChangeInt(a)print(a)#-------------------------------------def ChangeList1(ls, index): #改变...

myctrd
7分钟前
1
0
人脸识别技术开发功能,人脸识别二次开发

人脸识别系统是针对机关单位的实际情况,基于人脸识别技术开发的机关、企业职员考勤、门禁、食堂餐饮、停车等信息管理系统。实现“一张笑脸,通行单位”的功能。人脸识别系统使用先进的人脸识...

非思丸智能FaceTo
8分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部