Sau khi đơn giản biên dịch lại ứng dụng iPhone của chúng tôi trên iOS 5.0 SDK mới được phát hành, tôi gặp phải vấn đề lạ - tất cả UIImage: imageNamed (cuộc gọi đầu tiên với tải hình ảnh thực) và UIImage: imageWithContentsOfFile bắt đầu hoạt động 10 chậm hơn so với trước. tôi quản lý để thu hẹp vấn đề xuống: đây là trường hợp chỉ cho các tập tin jpeg và png (không gifs!) và điều này không phải vì kích thước tập tin. thậm chí tải đơn giản 32 * 32 png nhỏ mất khoảng 300ms ... so với 30ms trên các thiết bị cũ hơn (được kiểm tra trên 3.1 và 4.3.5 với cùng mã chính xác)UIImage: imageWithContentsOfFile chậm hơn 10 lần trong iOS 5.0
tôi cũng đã cố tải hình ảnh qua CIImage mới được giới thiệu với mã này
WLLog(@"Data loading...");
NSData *imageData = [NSData dataWithContentsOfFile:path];
WLLog(@"CIImage creation...");
CIImage* cii = [CIImage imageWithData:imageData];
WLLog(@"CIImage creation ok...");
float scle = 1.0;
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 40000
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
scle = [[UIScreen mainScreen] scale];
}
#endif
CIContext *context = [CIContext contextWithOptions:nil];
UIImage* res5 = [[UIImage alloc] init];
WLLog(@"UIImage creation...");
[res5 initWithCGImage:[context createCGImage:cii fromRect:cii.extent] scale:scle orientation:UIImageOrientationUp];
WLLog(@"Done!");
mà không cần bất kỳ may mắn ... dòng này
CIImage* cii = [CIImage imageWithData:imageData];
mất 300ms cùng ngay cả trên hình ảnh nhỏ (4KB png). imho, không có gì đơn giản để phân tích cả!
Có điều gì để giải quyết sự thay đổi kỳ lạ như vậy trong thời gian tải không? Hiện tại, có vẻ như có điều gì đó đã thay đổi đáng kể trong nội bộ sdk: (
cảm ơn, tôi chắc chắn sẽ cung cấp cho nó một thử và đăng ở đây nếu nó giúp. anyway có vẻ như một lỗi cho tôi (những thứ không tốt hơn với 5.0.1 mới phát hành) và tôi sẽ gửi nó cho Apple sớm – IPv6
Vì vậy, bạn đã thử chưa?Nó có làm việc với bạn không? - Tôi đã làm một vài bài kiểm tra nữa xác nhận rằng nó đã làm với việc đọc PNG từ đĩa. Trên thực tế, việc đánh giá bằng một dấu vết Time Profiler khác mà tôi đã làm mất nhiều thời gian nhất là bị mất bởi iOS5 trong khi tạo lớp siêu dữ liệu cho PNG được đọc. – Martin
tuyệt vời! Có, điều này giúp rất nhiều, cảm ơn! và bạn có quyền - có vẻ như siêu dữ liệu chịu trách nhiệm về crazines này (cho cả jpeg và png). sau khi lưu lại tất cả các png và jpeg không có siêu dữ liệu, tất cả bắt đầu hoạt động như bình thường - hình ảnh đang tải trong 30 giây. có vẻ như SDK ios trước 5.0 chỉ bỏ qua bất kỳ siêu dữ liệu png/jpeg nào – IPv6