W mojej aplikacji mam następujący kod Objective-C:Błąd optymalizacji pętli LLVM?
-(void)layoutPages
{
NSMutableArray* sections = [NSMutableArray array];
[sections addObject:[[NSAttributedString alloc] initWithString:@"Hello world"]];
for (NSAttributedString* contentSection in sections) {
NSLog(@"%@",contentSection);
}
}
Console wyjście: 2014-04-22 14:11:01.505 MyApp[24784:830b] Hello world{}
Gdybym kompilacji dla architektury x86_64 używając optymalizacji -os, LLVM następnie optymalizuje się cicho zmienna pętli "contentSection". Kiedy używam -O0, błąd znika. Jest to wyjście, gdy próbuję wydrukować opis zmiennej contentSection:
(lldb) po contentSection
error: Couldn't materialize struct: the variable 'contentSection' has no location, it may have been optimized out
Errored out in Execute, couldn't PrepareToExecuteJITExpression
Jak to możliwe? Z mojego punktu widzenia, zmienna pętli nigdy nie powinna być optymalizowana, gdy jest używana wewnątrz pętli. Widziałem, że inni ludzie mają podobny problem z LLVM, ale nie ze zmienną pętli. Czy może to być błąd kompilatora?
czy próbowałeś użyć właściwości self.contentSections zamiast ivar –
Dzięki @PeterLapisu Próbowałem tego z tym samym wynikiem. – Sbhklr
W jaki sposób zadeklarowałeś 'iVar' lub' @ property'? Ponieważ może się zdarzyć, że więcej zarządzania pamięcią vigiours może się odbywać przy użyciu opcji '-Os' i' _contentSections', następuje dezalokacja. – Rich