Почему вторая строка в цикле (a.retainCount) не падает (из-за плохого доступа)?
NSArray* a0 = @[[NSMutableString stringWithString:@"a"]];
NSArray * arr = [NSArray arrayWithObject:a0];
[a0 release];[a0 release];
for (NSArray* a in arr)
{
//NSLog(@"%d", (a == a0) );
NSLog(@"RC: %d", a.retainCount);
}
но это приведет к сбою, если первая строка в цикле (a == a0 one) не будет прокомментирована.
Это определенно приведет к сбою, когда пул автовыпуска будет истощен, но я специально спрашиваю о второй строке цикла, а не после.
Кто-нибудь может объяснить?
xcode
? - person Popeye   schedule 01.07.2013a0
, если он вам не принадлежит? Нетalloc
,new
илиcopy
, так что вы перевыпускаете его. Это может быть причиной сбоя, когда вы делаете журнал равенства, потому что он указывает на недопустимый адрес памяти. - person rckoenes   schedule 01.07.2013(a == a0)
возможно вылетает какsizeof(BOOL) != sizeof(int)
;int
является тем, что ожидает спецификатор формата%d
. - person trojanfoe   schedule 01.07.2013int
. И даже если нет: в списке переменных аргументов все целочисленные аргументы, меньшиеint
, повышаются доint
. - person Martin R   schedule 01.07.2013