作者uranusjr (←这人是超级笨蛋)
看板MacDev
标题Re: [问题] 何时需要release
时间Fri Sep 4 20:15:07 2009
※ 引述《leondemon (狗狗)》之铭言:
: 感谢回应
: 所以说
: NSNumber *num1 = [NSNumber numberWithInteger: 100]; 时
: numberWithInteger中会执行alloc(retain count=1)、init其值、并self autorelease
: 然後再pool drain时 这个物件才会retain count-1 然後即被dealloc
: 我这样的理解对吗?
应该是, 我也没有深入去想过到底是怎样
我是实务上视为是这样, 没有问题就不管了XD
下一篇讲的就顺便题一下
官方上每个有 init 开头的 method 都会有一个会 autorelease 的对应
以 NSNumber 为例, 你可以 [[NSNumber alloc]
initWithInteger:i]
所以你就一定可以 [NSNumber
numberWithInteger:i]
NSString 啊 NSArray 之类的也是一样, 名称也很显然
在命名时官方也是建议这样
如果一个 method 不会把 object 放进 aurelease pool
就要在 method 名称里写上 copy 或 init, 反之就绝对不要, 而且最好有规则
例如有个 class 叫 Ratatouille
那就可以写一个 + (id)initWithVegetables:
对应就要写成 + (id)ratatouilleWithVegetables: 这样
--
╱ ̄ ̄ ̄╲
▏
◢█◣ ▏
︻█︻█ ▏
成龙表示: 是喔...
′/ ‵ ▏
╰╯ █╱
ψQSWEET ◥︶█◤
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.72.123
1F:推 itsZero:其实新的 Static Analyzer 也是依靠这个规则在运作的 xD 09/04 20:31
2F:→ aecho:我书惯把method的开头分成copy和get,用来区分记忆体到时候 09/05 19:12
3F:→ aecho: 习 09/05 19:12
4F:→ aecho:,呼叫该method的要不要释放掉。 09/05 19:13
5F:→ uranusjr:在 objective-C 里面通常这里不会用「get」喔 09/05 19:15
6F:推 aecho:程式一直长大@@要找leak都是看着有copy的,是否跟着release 09/05 19:16
7F:→ aecho:呵呵,我是从MFC跳过来的 Orz 09/05 19:17