0

NSStrings在课间发送了很多次,我想我正在失去它们。

可以说我有:classA ,classB, classC

classAclassB(已分配)的实例,他正在调用 B 类中的函数,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它们获得的参数的值?我该怎么做才能让这个字符串在无限类之间传递而不被释放?

**不知道它是否重要,但classA/B不使用ARC,但classC使用

4

3 回答 3

3

ClassB需要拥有它自己传递给 class 的字符串的副本C。由于NSString实例被认为是值对象,因此您不能简单地保留字符串,而是创建一个副本。

NSString newString = [aString copy];在这种情况下aString可以安全地释放,因为您已经拥有一个具有自己保留计数的副本,该副本不会被释放。

不要忘记发布/自动发布您的副本。这不会自动为您完成。如果您忘记了这一点,您的应用程序将泄漏内存。

以下代码应该适合您:

[classCInstance send:[[data copy] autorelease]];
于 2013-03-07T12:04:15.103 回答
0

在将其传递给类方法之前分配或保留NSString对象。

于 2013-03-07T12:04:39.270 回答
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];
}
于 2013-03-07T12:12:31.360 回答