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

news/2024/7/20 12:58:21 标签: 移动开发, 内存管理

最近在做程序的时候,突然发现对于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对象.

[objc]  view plain copy
 
  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

转载于:https://www.cnblogs.com/langtianya/p/4012365.html


http://www.niftyadmin.cn/n/1539220.html

相关文章

新墨西哥大学的计算机等科学,2020年新墨西哥大学排名TFE Times美国最佳计算机科学硕士专业排名第97...

新墨西哥大学实力介绍新墨西哥大学(University of New Mexico&#xff0c;简称UNM)&#xff0c;位于美国新墨西哥州阿尔伯克基(Albuquerque)&#xff0c;成立于1889年&#xff0c;是一所四年制公立大学。在世界范围内活跃校友近17万&#xff0c;其中前中国国家女子排球队主教练…

使用@Cacheable 踩过的坑

public class XXX{     Resourceprivate XXX self;//Cacheable通过内部调用将不会使用缓存,从Spring4.3开始可以通过注入self,再通过self内部调用即可解决 public final static String MY_KEY"my_key:"; Cacheable(valueMY_KEY, key "#root.target.getForm…

2015届求职经历(转)

&#xff08;以下内容&#xff0c;如有疏误&#xff0c;敬请指正。谢谢&#xff01;如果有什么问题&#xff0c;也可以相互交流。&#xff09; 先讲一下结果&#xff1a;腾讯和百度都给了offer。 最后签了腾讯的offer。2015届毕业季求职生涯就此告一段落&#xff5e;&#xff0…

贵州省电子计算机学校,贵州省计算机学校有哪些

与学生同学习、同生活、同劳动、同活动&#xff0c;第二学年实施技能教育学历教育&#xff0c; 贵阳市铁二局技工学校办学优势 1、教师队伍&#xff1a;学校注重教师团队的建设。学生不得出校&#xff0c;学校在新生入学第一学年实施素质教育技能教育&#xff0c;现已拥有300余…

linux下mysql数据的导出和导入

导出整个数据库中的全部数据 1、在linux命令行下输入&#xff1a; mysqldump -u userName -p dabaseName > fileName.sql fileName.sql最好加上路径名 导出数据库中的某个表的数据 mysqldump -u userName -p dabaseName tableName > fileName.sql导出整个数据库中的全…

go语言熟知的开源项目

go语言在国内是比较火的&#xff0c;并且好多公司都用go语言进行重构之前的系统&#xff0c;今天来看下基本大家都知道的go语言的开源项目 1、Docker Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发…

计算机新应用外文翻译,计算机 外文翻译 外文文献 英文文献及译文一种新的网络应用程序开发框架MVC...

计算机 外文翻译 外文文献 英文文献及译文一种新的网络应用程序开发框架MVC 译文一&#xff1a;一种新的网络应用程序开发框架——MVC *摘要MVC(Model/View/Controller)的设计模式出现在在Smalltalk-80,并在软件的设计中广泛应用。本文介绍一种基于MVC框架的的新网络应用程序。…

竟然能忘记时间

今天是学习效率最高的一晚上&#xff0c;虽然先开始把书拿错了&#xff0c;但是还是为今天晚上的表现点个赞。多元统计分析引论解决了一些以前不会的问题。今天我竟然学着学着忘记了时间&#xff0c;太难得了&#xff01; 转载于:https://www.cnblogs.com/yhmxjyn/p/4018134.ht…