オブジェクトの C 配列を初期化し、最初の要素を設定しています。
id __strong *_objs = (id __strong *)calloc(16,sizeof(*_objs));
_objs[0] = @1;
_count++;
次に、NSFastEnumeration の次の実装を使用しています。
- (NSUInteger) countByEnumeratingWithState: (NSFastEnumerationState*)state
objects: (id __unsafe_unretained*)stackbuf
count: (NSUInteger)len
{
NSUInteger size = _count;
NSInteger count;
state->mutationsPtr = (unsigned long *)size;
count = MIN(len, size - state->state);
if (count > 0)
{
IMP imp = [self methodForSelector: @selector(objectAtIndex:)];
int p = state->state;
int i;
for (i = 0; i < count; i++, p++) {
stackbuf[i] = (*imp)(self, @selector(objectAtIndex:), p);
}
state->state += count;
}
else
{
count = 0;
}
state->itemsPtr = stackbuf;
return count;
}
残念ながら、実行すると EXC_BAD_ACCESS でクラッシュします。
for (id object in array){ // EXC_BAD_ACCESS
NSLog(@"%@",object)
}
理由はありますか?
CodeRunnerをお持ちの場合は、ここに実行可能バージョンがあります。