我在班级之间多次发送NSStrings
,我认为我正在失去它们。
我想说:classA ,classB, classC
classA
具有classB
(已分配)的实例,并且他在classB中调用函数,
B中的功能:
-(NSMutableData*)setProtocolDataForString:(NSString*)data WithCommand:(int)comm
{ //here i can see and log the string 'data', but i am sending him to classC from here
[classCInstance send:data];
}
classA
使用以下内容调用该函数:..setProtocolDataForString:@"ran"];
正如我在里面写的那样,我可以看到classB得到了字符串,但在他把他传递到另一个classC之后,我认为它正在丢失。
函数如何保存/保留它们获得的NS
参数的值?
我该怎么做才能使这个字符串在无限类之间传递而不被释放?
**不知道它是否重要,但是A类和B类不使用ARC,但是classC确实
答案 0 :(得分:3)
类B
需要拥有它传递给类C
的字符串的副本。由于NSString
实例被视为值对象,因此您不是简单地保留字符串,而是创建副本。
NSString newString = [aString copy];
aString
可以安全地发布,因为你已经有一个副本,它有自己的保留计数,不会被释放。
不要忘记发布/自动释放您的副本。这不是自动为您完成的。如果您忘记了这一点,您的应用程序将泄漏内存。
以下代码适合您:
[classCInstance send:[[data copy] autorelease]];
答案 1 :(得分:0)
在将 NSString 对象传递给class方法之前,先分配或保留它。
答案 2 :(得分:0)
你必须保留字符串,因为A类和B类没有启用ARC。
-(NSMutableData*)setProtocolDataForString:(NSString*)data WithCommand:(int)comm
{ //here i can see and log the string 'data', but i am sending him to classC from here
[data retain];
[classCInstance send:data];
}