2009-03-02 54 views
0

我想從一個類發送一個字符串到其他:如何在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」];任何關於它有什麼問題的想法?

回答

1

stringWithString是一個類方法返回一個autoreleased字符串。你應該調用它像這樣:

myProperty = [NSString stringWithString:strURL]; 

在這裏,我假定你的財產做一個副本,來增加上是一個從stringWithString方法返回的字符串自動釋放的保留計數。 (從alloc調用返回的對象的保留計數爲1,而不是自動釋放。)通常給字符串複製屬性而不是保留字段 - 通常只需要自己的字符串副本,而不是共享引用由別人擁有的字符串。

我也不明白爲什麼你寫這樣的代碼,除非它只是一個例子。在第2課中,你需要做的是寫

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

感謝您的回答。是的,這只是我寫的一個簡單的測試來傳遞價值。 – 2009-03-03 03:09:01

1

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