Pergunta

Eu quero enviar uma cadeia de uma classe para a outra:

1) Em class1, eu adicionar uma propriedade para armazenar o string:

@property (nonatomic, retain) NSString *str; 

2) e um método para enviar de volta uma string:


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

3) Em class2, eu adicionar uma propriedade para segurar a corda recebidas:

@property (nonatomic, retain) NSString *returnStr; 

4) e o seguinte código:

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

Mas o programa pára em ReturnStr = [c1 sendBackStr: @ "URL"]; Todas as ideias sobre o que há de errado com ele?

Foi útil?

Solução

stringWithString é um método de classe retornar uma string autoreleased. Você deve estar chamando-o assim:

myProperty = [NSString stringWithString:strURL]; 

Aqui eu assumir sua propriedade faz uma cópia, para incrementar a contagem na corda autoreleased que é retornado do método stringWithString reter. (Objetos retornados de chamadas Alloc ter um manter a contagem de um e não são autoreleased.) É mais usual para dar seqüências a propriedade cópia em vez do reter um - normalmente você apenas quer sua própria cópia de uma corda, e não uma referência compartilhada para uma string de propriedade de outra pessoa.

O que eu também não consigo entender é por que você escreveu o código como este, a menos que ele é apenas um exemplo. Na classe 2, tudo que você precisa fazer é escrever

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

Outras dicas

stringWithString:. É uma mensagem que deve ser enviado para a classe NSString, não uma instância de sua classe (retornado via alloc)

O código correto deve ser:

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

Você pode querer familarize-se mais sobre os idiomas ao redor de alocação, retenção e autoreleasing de ponteiros. Se você quisesse alloc esta cadeia por algum motivo e devolvê-lo a partir do sendBackStr: mensagem, então você provavelmente quer este código:

-(NSString *)sendBackStr:(NSString *)strURL
{
    return [[[NSString alloc] initWithString:strURL] autorelease];
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top