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

时间:2009-03-02 14:49:39

标签: iphone class-design data-transfer transfer

我想从一个类发送一个字符串到另一个类:

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

@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”];关于它有什么问题的任何想法?

2 个答案:

答案 0 :(得分:1)

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

正确的代码应该是:

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

您可能希望更多地了解有关指针的分配,保留和自动释放的习惯用语。如果你想出于某种原因分配这个字符串并从sendBackStr:消息中返回它,那么你可能想要这个代码:

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

答案 1 :(得分:1)

stringWithString是一个返回自动释放字符串的类方法。你应该这样称呼它:

myProperty = [NSString stringWithString:strURL]; 

这里我假设你的属性做了一个副本,以增加从stringWithString方法返回的自动释放字符串的保留计数。 (从alloc调用返回的对象的保留计数为1,并且不会自动释放。)为字符串提供copy属性而不是retain属性更常见 - 通常只需要自己的字符串副本,而不是对字符串的共享引用别人拥有的字符串。

我也无法理解为什么你写这样的代码,除非它只是一个例子。在第2课,您需要做的就是写

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