如何在iPhone上的类间传输值?

问题描述:

我想从一个类发送一个字符串到其他:如何在iPhone上的类间传输值?

1)在Class,我添加了一个属性来保存字符串:

@property (nonatomic, retain) NSString *str;

2)和方法发回一个字符串:


-(NSString *)sendBackStr:(NSString *)strURL 
{ 
    NSString *str = [[NSString alloc] stringWithString:strURL]; 
    return str; 
} 

3)在Class2中,我添加了一个属性来保存接收到的字符串:

@property (nonatomic, retain) NSString *returnStr;

4)和下面的代码:

Class1 *c1 = [[Class1 alloc] init]; 
returnStr = [c1 sendBackStr:@"URL"];

但程序在returnStr停止= [C1 sendBackStr:@ “URL”];任何关于它有什么问题的想法?

stringWithString是一个类方法返回一个autoreleased字符串。你应该调用它像这样:

myProperty = [NSString stringWithString:strURL]; 

在这里,我假定你的财产做一个副本,来增加上是一个从stringWithString方法返回的字符串自动释放的保留计数。 (从alloc调用返回的对象的保留计数为1,而不是自动释放。)通常给字符串复制属性而不是保留字段 - 通常只需要自己的字符串副本,而不是共享引用由别人拥有的字符串。

我也不明白为什么你写这样的代码,除非它只是一个例子。在第2课中,你需要做的是写

returnStr = [NSString stringWithString:@"URL"]; 
+0

感谢您的回答。是的,这只是我写的一个简单的测试来传递价值。 – 2009-03-03 03:09:01

stringWithString:是需要发送到NSString类的消息,而不是您的类的实例(通过alloc返回)。

正确的代码应该是:

-(NSString *)sendBackStr:(NSString *)strURL 
{ 
    return [NSString stringWithString:strURL]; 
} 

你可能想familarize自己更了解身边的分配,保留和指针的自动释放成语。如果你想的Alloc此字符串出于某种原因,并从sendBackStr退回它的消息,那么你可能会想这样的代码:

-(NSString *)sendBackStr:(NSString *)strURL 
{ 
    return [[[NSString alloc] initWithString:strURL] autorelease]; 
} 
+0

该alloc没有返回“你的类”的实例 - 它是[NSString alloc]。但是stringWithString是一个类方法。 – 2009-03-02 18:08:32