我会后,使用自动释放著名方法stringByAppendingString的样品的方法的缺点3变体(在Xcode 4.6.2.IOS项目非弧样本项目)stringByAppendingString并保留困境
样本块1:没有返回。只是一个奇怪的指向nothing.but不为null。
示例块2:不返回任何内容!
示例块3:返回A1A2A3。如预期的那样,但我认为它已经泄漏。
我的问题是:
a)示例方法1在MAC项目中按预期工作。但不在IOS项目中。
b)是样本块3 - 包括泄漏?
c)查看样本区块2中的注释。word_变成A1,A1A2而没有。为什么?
d)你会用不同的方式编码你自己的同一个方法吗?我正在寻找安全的标准方法。
谢谢。
样品块1
-(NSString*)sampleMethod
{
NSString *[email protected]"";
NSString *[email protected]"A1";
NSString *[email protected]"A2";
NSString *[email protected]"A3";
word_=[word_ stringByAppendingString:a1];// word_ is A1
word_=[word_ stringByAppendingString:a2];// word is nothing but another pointer
word_=[word_ stringByAppendingString:a3];// word is nothing too but pointer changed.
return word_;
}
样品块2
-(NSString*)sampleMethod
{
NSString *[email protected]"";
NSString *[email protected]"A1";
NSString *[email protected]"A2";
NSString *[email protected]"A3";
word_=[word_ stringByAppendingString:a1];// word_ is A1
word_=[[word_ stringByAppendingString:a2]retain];// word is A1A2
word_=[[word_ stringByAppendingString:a3]retain];// word is nothing !
return word_;
}
样品块3
-(NSString*)sampleMethod
{
NSString *[email protected]"";
NSString *[email protected]"A1";
NSString *[email protected]"A2";
NSString *[email protected]"A3";
word_=[[word_ stringByAppendingString:a1]retain];// word_ is A1
word_=[[word_ stringByAppendingString:a2]retain];// word_ is A1A2
word_=[[word_ stringByAppendingString:a3]retain];// word_ is A1A2A3
return word_;//returns as expected but I think leaks method in this method.
}
我的答案:只是因为我什么都没做错。通过调试过程步骤收集变量值非常尖锐。
但不知何故,它解决了干净的project.hope这可能为他人节省几个小时。或不知道也许在内存芯片地址出了问题。
如果你的代码没有做它应该做的事情放在断点并检查它,如果你看到它没有做代码说什么,是时候清理了。 –
仅供参考,写这个的惯用方式是'NSString * word_ = [NSString stringWithFormat:@“%@%@%@”,a1,a2,a3]'。 – Chuck
我认为这只是了解内存管理如何工作的一个例子。否则,他可以返回@“A1A2A3”。 –