Странное поведение с переменной экземпляра NSString - PullRequest
2 голосов
/ 21 марта 2012

Вот часть определения класса в программе iOS, использующей подсчет ссылок (ARC):

@interface CapViewController : UIViewController 
{
    NSString *bottomBn;
    NSString *topBn;
}

@property (nonatomic, strong) NSString *bottomBn;
@property (nonatomic, strong) NSString *topBn;

@end

В реализации я синтезирую их:

@implementation CapViewController

@synthesize bottomBn;
@synthesize topBn;

Проблема заключается в том, когдаЯ пытаюсь присвоить значения.Если я перейду следующие строки в методе класса (каждый раз будет использоваться каждая переменная экземпляра):

bottomBn = [NSString stringWithString:@"bottomBn"];        
topBn = [NSString stringWithString:@"topBn"];

После выполнения первой строки значение topBn становится @ "bottomBn", а bottomBn -nil Вторая строка не оказывает влияния.

Если я изменяю порядок, переменные экземпляра определяются в классе, то есть:

NSString *topBn;
NSString *bottomBn;

, тогда первое назначение не имеет никакого эффекта, а второе назначениев результате topBn присваивается bottomBn.

Используя локальные переменные, он работает как положено:

NSString *localbottomBn = [NSString stringWithString:@"defaultbottombutton"];        
NSString *localtopBn = [NSString stringWithString:@"defaulttopbutton"];

Мне кажется, это странное поведение.Буду признателен за любую помощь.

Ответы [ 2 ]

7 голосов
/ 21 марта 2012

Вы не устанавливаете автоматически выпущенные строки, вы должны установить строки как:

self.bottomBn = [NSString stringWithString:@"bottomBn"];        
self.topBn = [NSString stringWithString:@"topBn"];
0 голосов
/ 21 марта 2012

У меня такие же проблемы с другими типами и объектами (даже CGFloat и CGPoint). Я думаю, что проблема в отладчике. Попробуйте вывести строки вместо переменных поиска через отладчик. Для меня функция NSLog вывести то, что я ожидал.

Я понятия не имею, почему отладчик имеет такое непредсказуемое поведение (может быть, это ошибка), но теперь я предпочитаю "отладку NSLog". Это печально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...