NSString的一点tips

When to release a NSString in iPhone


up vote 7down votefavorite

7
share [fb]share [tw]

I have the following method

   -(NSMutableArray *) getPaises {
     NSMutableArray * paises;
     paises = [[NSMutableArray alloc] init];
     while( get new row ) {
      NSString *aPais =  [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
      [paises addObject:aPais];
     }
     return paises;
    }

I am not releasing the aPais, because if I do it the application crashes. I don't know when or if whether I should release it somewhere after using it and, if so, how do I do it. Just release the NSMutableArray is enough? Or do I have to traverse it and release each object?

And if I don't have to release it, who is the responsible for releasing?

iphone objective-c cocoa


link|improve this question

edited Mar 2 '09 at 12:53

andynormancx
3,2711026

asked Mar 2 '09 at 12:38

Sacha Fuentes
4514

A note regarding method naming: In Cocoa, a method named “getFoo” returns foo by reference: - (void) getFoo:(out NSMutableArray **)outArray. To be consistent with Cocoa naming conventions, you should name your method simply “paises”. – Peter Hosey Mar 2 '09 at 18:13

feedback

2 Answers

active oldest votes


up vote 6 down voteaccepted

As epatel said, you don't need to release that particular string. If you wanted to be more proactive, you could do this instead:

-(NSMutableArray *) getPaises {
    NSMutableArray * paises;
    paises = [[[NSMutableArray alloc] init] autorelease];
    while( get new row ) {
        NSString *aPais =  [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
        [paises addObject:aPais];
        [aPais release];
    }
    return paises;}

In summary:

  • [[NSString alloc] initWith...] -> You must release or autorelease.
  • [NSString stringWith...] -> No need to release.

-- Edit: Added autorelease for paises, as you are returning it. When you return an object, always autorelease it if you have alloc&init'd it.


link|improve this answer

edited Mar 2 '09 at 13:14

answered Mar 2 '09 at 13:01

squelart
2,258717

Thanks a lot. I'm releasing the NSMutableArray manually, but the autorelease is a better option. Gonna change it. – Sacha Fuentes Mar 2 '09 at 14:30

feedback


up vote 4down vote

stringWithUTF8String: returns an autorelease string which will be released automatically by Cocoa in the next eventloop. But the string is also retained in the array when you do addObject:...so as long as it is in the array it will be retained.


link|improve this answer

answered Mar 2 '09 at 12:48

epatel
16.8k83876


Was this post useful to you?     

欢迎加群互相学习,共同进步。QQ群:iOS: 58099570 | Android: 330987132 | Go:217696290 | Python:336880185 | 做人要厚道,转载请注明出处!http://www.cnblogs.com/sunshine-anycall/archive/2011/10/21/2219738.html

时间: 2024-10-25 14:02:08

NSString的一点tips的相关文章

iPhone文件系统NSFileManager讲解

iPhone文件系统NSFileManager讲解是本文要介绍的内容,主要是通过iphone文件系统来学习NSFileManager的使用方法,具体内容来看本文详解. iPhone文件系统:创建.重命名以及删除文件,NSFileManager中包含了用来查询单词库目录.创建.重命名.删除目录以及获取/设置文件属性的方法(可读性,可编写性等等). 每个程序都会有它自己的沙盒,通过它你可以阅读/编写文件.写入沙盒的文件在程序的进程中将会保持稳定,即便实在程序更新的情况下. 如下所示,你可以在沙盒中定

40个良好用户界面Tips

1 尽量使用单列而不是多列布局 单列布局能够让对全局有更好的掌控.同时用户也可以一目了然内容.而多列而已则会有分散用户注意力的风险使你的主旨无法很好表达.最好的做法是用一个有逻辑的叙述来引导用户并且在文末给出你的操作按钮. 2 放出礼品往往更具诱惑力 给用户一份精美小礼品这样的友好举动再好不过了.具体来讲,送出礼品也是之有效的获得客户忠诚度的战术,这是建立在人们互惠准则上的.而这样做所带来的好处也是显而易见的,会让你在往后的活动进展(不管是推销,产品更新还是再次搞活动)中更加顺利. 3 合并重复

30 个增进 Blogging 的 tips

写博客也是写作.许多人都说要内容为王,如果内容为王,那么保护这个王的一切就是行文与措词.下面是一些你可以用在写博客上的 tips : 1. 不只是展示,展示并告知( Don ' t Just Show , Show and Tell ):让你的文字谁(无论老手与菜鸟)都能理解,当文字无法把你的意思表达清楚的时候,适当地加上图片. 2. 关键词.关键词.关键词( Keywords , Keywords , Keywords ):因为谷歌发布了博客 PageRank 专利.关键词必须比以前更加重视.

开发 Electron app 必知的 4 个 tips

本文讲的是开发 Electron app 必知的 4 个 tips, Electron ,是包括 Avocode 在内的众多 app 采用的技术,能让你快速实现并运行一个跨平台桌面应用.有些问题不注意的话,你的 app 很快就会掉到"坑"里.无法从其它 app 中脱颖而出. 这是我 2016 年 5月 在 Amsterdam 的 Electron Meetup 上演讲的手抄版,加入了对 api 变化的考虑.注意,以下内容会很深入细节,并假设你对 Electron有一定了解. 首先,我是

让你的网站更炫酷的一些小 tips

本文讲的是让你的网站更炫酷的一些小 tips, 上周,我和一位老客户聊天,她说:"尼克,我觉得我的网站需要改进,但我不能确定我具体需要做什么." 然后我就去问了一圈,包括朋友.家人和其他非互联网行业的商务人士,他们都提到了相同的观点: "我需要一个检查清单,因为我不知道怎样建站,这也是我要雇人来做这件事情的原因.但是我依然需要知道这个过程涉及到哪些方面." 因此,我列了一个我们在 AwesomeWeb 上完成的优化清单(以及一些我们还没完成的). 我敢保证: 如果你

Android 应用开发者必看的 9 个 Tips

去年,Android应用数量已经超过iOS成为全球最大的生态系统,不过在这多大百万的应用中,有些应用的下载量很大,赚的盆满钵满:另外一些应用就石沉大海.无人问津了. 拥有多年程序开发经验,最近在开发Android应用Sliding Explorer的Shirwa Mohamed就总结了一些看似普通却非常实用的Tips,我们来一起看看. 1.遵循Andriod开发手册 谷歌已经为开发者提供了一整套开发范例,虽然不是强制采用,但按照手册来进行编程无疑可以让你对Android系统如何运行你的程序理解的

关于JS的几点TIPS

原文:关于JS的几点TIPS 作为前端基本工作每天都会用到JS...但是我们对JS真的都了解吗,或者说有什么tips是我们不知道的呢.. So..此文关于JS的几点tips..... 一:定时器(可传多个参数) 首先是一个一般的定时器,一般我们使用就用到定时器的2个参数,一个是function函数,一个是时间. setTimeout(function(){ //函数 alert(1); },2000) //时间 但是其实定时器有很多个参数参数,tips: setTimeout(function(

JQuery Tips(4) 一些关于提高JQuery性能的Tips_jquery

在选择时,最好以ID选择符作为开头 我想这个很好理解,因为JQuery内部使用document.getElementByID方法进行ID选择,这种方法比其他所有对DOM选择的方法更快,所以以$("#")开头是最好的,比如: 复制代码 代码如下: <div id="a"> <div class="b"> <div class="c"> <div class="d"&g

iOS 7: Base64 Encode and Decode NSData and NSString Objects

iOS 7: Base64 Encode and Decode NSData and NSString Objects FRI, JAN 24  CORE SERVICESTWEET With the release of iOS 7, Apple added support for encoding and decoding data using Base64. In this post we will walk through two examples using Base64 to enc