NSString作为多个类之间的参数

时间:2013-03-07 11:55:25

标签: objective-c

我在班级之间多次发送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确实

3 个答案:

答案 0 :(得分:3)

B需要拥有它传递给类C的字符串的副本。由于NSString实例被视为值对象,因此您不是简单地保留字符串,而是创建副本。

在这种情况下,{p> 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];
}