Вопрос

Я хочу отправить строку из одного класса в другой:

1) В классе 1 я добавляю свойство для хранения строки:

@property (nonatomic, retain) NSString *str; 

2) и метод отправки строки обратно:


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

3) В классе 2 я добавляю свойство для хранения полученной строки:

@property (nonatomic, retain) NSString *returnStr; 

4) и следующий код:

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

Но программа останавливается на returnStr = [c1 sendBackStr:@"URL"];Есть идеи, что с этим не так?

Это было полезно?

Решение

stringWithString — это метод класса, возвращающий автоматически выпускаемую строку.Вы должны называть это так:

myProperty = [NSString stringWithString:strURL]; 

Здесь я предполагаю, что ваше свойство выполняет копию, чтобы увеличить счетчик сохранения автоматически выпущенной строки, возвращаемой методом stringWithString.(Объекты, возвращаемые из вызовов alloc, имеют счетчик сохранения, равный единице, и не освобождаются автоматически.) Чаще всего строкам присваивается свойство copy, а не свойство сохранения — обычно вам нужна только собственная копия строки, а не общая ссылка на строка, принадлежащая кому-то другому.

Чего я также не могу понять, так это почему вы написали такой код, если только это не просто пример.Во 2 классе все, что вам нужно сделать, это написать

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

Другие советы

строка со строкой:— это сообщение, которое необходимо отправить классу NSString, а не экземпляру вашего класса (возвращается через alloc).

Правильный код должен быть:

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

Возможно, вам захочется подробнее ознакомиться с идиомами выделения, хранения и автоматического освобождения указателей.Если по какой-то причине вы хотите выделить эту строку и вернуть ее из sendBackStr:сообщение, то вам, вероятно, понадобится этот код:

-(NSString *)sendBackStr:(NSString *)strURL
{
    return [[[NSString alloc] initWithString:strURL] autorelease];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top