我想从一个类发送一个字符串到另一个类:
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”];关于它有什么问题的任何想法?
答案 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"];