2011-10-31 24 views
7

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: (

Trả lời

8

.. Tôi đã có cùng một vấn đề và mất một vài giờ để tìm hiểu những gì đã xảy ra. Hai tình huống của chúng tôi dường như giống hệt nhau: Một dự án cũ không chạy tốt trên iOS5 y hơn.

Vì vậy, tôi đã lấy Hồ sơ thời gian của Instrument và tìm hiểu sâu vào ứng dụng của mình chỉ để tìm ra rằng mỗi lần ứng dụng treo nó thực sự đang trong quá trình mở tệp PNG cho UIImageViews, giống như bạn đã phát hiện ra. Nhưng các ứng dụng khác tôi đã viết không có vấn đề này, và tôi đã làm tất cả mọi thứ theo cùng một cách. Vì vậy, đánh giá bởi những gì bạn có kinh nghiệm và các ứng dụng khác của tôi đã chạy tốt, tôi figured nó phải có cái gì để làm với các tập tin PNG mình. Và đoán xem điều gì, hóa ra tôi đã đúng.

Vì vậy, tôi đã ngồi xuống và viết một tập lệnh chuyển tất cả các tệp PNG qua chuyển đổi của ImageMagick để tạo TGA ra khỏi chúng, sau đó xóa PNG (chỉ để đo tốt) và sau đó chuyển đổi TGA tạm thời về tệp PNG. Bằng cách đó tôi đã chắc chắn rằng họ không chỉ không được tạo ra bởi Photoshop nữa, mà còn hoàn toàn viết lại.

Điều đó đã làm điều đó. Mọi thứ diễn ra trôi chảy ngay bây giờ, giống như trên iOS 3 và 4.

Tôi không chắc liệu nó có liên quan gì đến Photoshop không. Các ứng dụng khác gần đây tôi đã làm việc tốt với PNG được tạo bằng Photoshop. Vì vậy, có lẽ đó là phiên bản Photoshop tôi đã sử dụng khá chính xác một năm trước đây để tạo ra những PNG đó ngay từ đầu.

Hoặc có thể chỉ cần ghi đè lên các tệp hình ảnh cũ là đủ, tôi không chắc chắn. Nhưng bây giờ nó chạy tốt.

Tôi hy vọng điều này sẽ hữu ích!

+0

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

+0

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

+0

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

4

Nó có thể là một lỗi. Hãy gửi một radar tới Apple qua số bug reporter. để báo cáo lỗi - nếu Apple sẽ gửi cho bạn một email yêu cầu cho một

Đăng hàng của mình radar # ở đây để những người khác với một vấn đề tương tự có thể tham khảo mà # khi nộp một lỗi tương tự như của Apple cũng

Các vấn đề liên quan