0

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

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

4

2 回答 2

1

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

正确的代码应该是:

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

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

-(NSString *)sendBackStr:(NSString *)strURL
{
    return [[[NSString alloc] initWithString:strURL] autorelease];
}
于 2009-03-02T15:27:17.403 回答
1

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

myProperty = [NSString stringWithString:strURL]; 

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

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

returnStr = [NSString stringWithString:@"URL"];
于 2009-03-02T18:15:55.173 回答