2009-03-02 18 views
0

diğer bir sınıftan bir dize göndermek istiyorum: bir dize geri göndermekiPhone'daki sınıflar arasında değerler nasıl aktarılır?

@property (nonatomic, retain) NSString *str;

2) ve bir yöntem:

1) Class1, ben dize tutacak bir özellik eklemek :

@property (nonatomic, retain) NSString *returnStr;
:


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

3) Class2 olarak, aldığım dizeyi tutmak için bir özellik eklemek 210

4) ve kodu:

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

Ancak programı = returnStr durur [sendBackStr C1: @ "URL"]; Neyin yanlış olduğuyla ilgili bir fikrin var mı?

cevap

1

stringWithString bir autoreleased dize döndüren bir sınıf yöntemidir. Böyle çağırmak edilmelidir: Burada

myProperty = [NSString stringWithString:strURL]; 

Ben stringWithString yöntemiyle yeni döndü autoreleased ipe sayısını korumak artırmak için, mülkünüz bir kopyasını yapar varsayalım. (Atama çağrılarından döndürülen nesnelerin sayısı korunur ve otomatik olarak yüklenmez.) Bir kopyasını saklamak yerine kopya özelliği vermek daha olağandır - genellikle yalnızca bir dizenin kopyasını istemelisiniz, dize başkasına aittir.

Ayrıca anlamadığım şey, yalnızca bir örnek olmadığı sürece kodu bu şekilde yazmanızın nedeni. sınıfta 2'de, yapmanız gereken tüm alloc "sınıfınızın" örneğini dönen değildir

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

Cevabınız için teşekkürler. Ve evet, bu sadece değeri aktarmak için yazdığım basit bir sınavdır. –

1

stringWithString: NSString sınıfına gönderilmesi gereken bir ileti olup, sınıfınızın bir örneği değil (ayırma yoluyla döndürülen).

doğru kod olmalıdır:

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

Sen işaretçiler tahsisi, saklama ve autoreleasing etrafında deyimler hakkında kendinizi daha familarize isteyebilirsiniz. Eğer herhangi bir nedenle bu dizeyi alloc ve sendBackStr itibaren dönmek istiyorsa: mesaj, muhtemelen bu kodu isteyeyim:

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

yazma - bu [NSString alloc] bu. Ama stringWithString bir sınıf yöntemidir. –

İlgili konular