이미지를로드하고 크기를 기록하는 작은 프로그램입니다. ARC 지원, llvm 3.0으로 컴파일됩니다. 나는 iPod 4.2에서 실행하고 재미있는 숫자를 얻습니다 ... 프로그램은 "-Os"(xcode의 "Release"에 대한 기본 최적화)를 사용하여 "Release"모드로 컴파일됩니다. 이 모든 일은 시뮬레이터에서는 일어나지 않습니다. 루프와 결합 된 @autoreleasepool이 스택을 손상 시킨다는 것을 알게되었습니다 ...이 간단한 예제를 사용하여이 게시물의 문제를 분리해야했습니다.@autoreleasepool (ARC, llvm 3.0으로 컴파일, 가장 빠름, 가장 작은 [-Os])로 손상된 스택
--------->
int main(int argc, char *argv[])
{
@autoreleasepool
{
return UIApplicationMain(argc, argv, nil,
@"AppDelegate");
}
}
@interface AppDelegate : UIWindow <UIApplicationDelegate>
@end
@implementation AppDelegate
-(void)loadImageAndLogValues
{
// image from bundle 256x26
UIImage *image = [UIImage imageNamed:@"Image.png"];
for (int i = 0; i < 1; i++)
{
NSLog(@"size=%@", NSStringFromCGSize(image.size));
NSLog(@"w=%f", image.size.width);
NSLog(@"h=%f", image.size.height);
NSLog(@"------------------------");
}
}
-(BOOL)application:(UIApplication*)application
didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
self.frame = [UIScreen mainScreen].bounds;
self.backgroundColor = [UIColor blueColor];
[self makeKeyAndVisible];
[self loadImageAndLogValues];
UIGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(loadImageAndLogValues)];
[self addGestureRecognizer:tap];
return YES;
}
@end
<------------------
가 그리고 이것은 내가 한 번 화면을 탭 한 후 출력 (! 태핑 후 로그인 할 때 "시간이"잘못된 이미지의 높이가 ... 26 인) : 이제
2011-10-21 01:54:48.677 Tmp[2522:307] size={256, 26}
2011-10-21 01:54:48.696 Tmp[2522:307] w=256.000000
2011-10-21 01:54:48.705 Tmp[2522:307] h=26.000000
2011-10-21 01:54:48.715 Tmp[2522:307] ------------------------
2011-10-21 01:54:50.576 Tmp[2522:307] size={256, 26}
2011-10-21 01:54:50.582 Tmp[2522:307] w=256.000000
2011-10-21 01:54:50.589 Tmp[2522:307] h=256.000000
2011-10-21 01:54:50.595 Tmp[2522:307] ------------------------
, main()에서 @autoreleasepool을 제거합니다.
int main(int argc, char *argv[])
{
//@autoreleasepool
//{
return UIApplicationMain(argc, argv, nil,
@"AppDelegate");
//}
}
프로그램을 실행하고 누릅니다. 또 "시간"에 대한 잘못된 값하지만 직접에서 "loadImageAndLogValues"호출 할 때 "응용 프로그램 : didFinishLaunchingWithOptions를 :"...
그래서 ... ARC + LLVM 3.0 + -Os + @autoreleasepool +에 대한2011-10-21 02:02:08.222 Tmp[2544:307] size={256, 26}
2011-10-21 02:02:08.240 Tmp[2544:307] w=256.000000
2011-10-21 02:02:08.250 Tmp[2544:307] h=256.000000
2011-10-21 02:02:08.259 Tmp[2544:307] ------------------------
2011-10-21 02:04:59.097 Tmp[2544:307] size={256, 26}
2011-10-21 02:04:59.103 Tmp[2544:307] w=256.000000
2011-10-21 02:04:59.109 Tmp[2544:307] h=26.000000
2011-10-21 02:04:59.115 Tmp[2544:307] ------------------------
(;;) + image.size.width/height가 나를 위해 작동하지 않습니다 :) 도와주세요! 고맙습니다!
당신은 애플 버그보고 시스템에 버그를보고 있나요? –
아니요.하지만 사과 개발자 포럼에 게시되었습니다. https://devforums.apple.com/message/564415#564415 답변이 없습니다. – debleek63
아무도 알려진 바가 없다면 어떻게 해결할 수 있습니까? 일부 무작위 포럼에 대한 간단한 질문은 도움이되지 않습니다. 문제 보고서를 작성해야합니다. –