2013-01-13 37 views
7

Vì tôi đã chuyển đổi một ứng dụng cũ sang iOS 6 Tôi đã bắt đầu nhận được thông báo sau trong bảng điều khiển của mình.Thời gian tải chậm UIViewController (cảnh báo ClientState chậm)

WARNING: Slow defaults access for key ClientState took 0.023656 seconds, tolerance is 0.020000

Ngoài việc cập nhật mã của tôi từ iOS 5 lên iOS 6, tôi cũng chuyển sang tự động bố trí. Tôi đã chạy Instruments/Time Profiler và rootViewController trong appDelegate của tôi là vấn đề. Mỗi khi tôi chuyển đổi các bộ điều khiển xem, nó sẽ chiếm phần lớn thời gian, (bất kể tôi có phải khởi tạo bộ điều khiển xem hay tái sử dụng bộ điều khiển đã tồn tại).

window.rootViewController = myViewController; 

Tôi biết phương pháp này bề ngoài, nhưng tôi không chắc điều gì xảy ra dưới bìa ... điều gì sẽ làm chậm và tôi có thể làm gì để tăng tốc?

EDIT: Tôi đã thử tắt bảng phân cảnh của mình và bố cục biến mất (dĩ nhiên bố cục giao diện người dùng của tôi bị lỗi). Vì vậy, kết luận rõ ràng là, đó là một cái gì đó về bố trí tự động. Tôi có lẽ chỉ dưới 70 lượt xem tất cả kết hợp trên màn hình và các ràng buộc khác nhau cần thiết để đặt chúng ra. Tôi có một thời gian khó tin rằng bố trí tự động là chậm hơn nhiều (từ ~ 80ms với bố cục tự động tắt đến ~ 1370ms với bố cục tự động bật).

+0

Cảnh báo kỳ lạ chưa từng thấy trước đây nhưng bạn có sử dụng Dữ liệu cốt lõi không? – Nathan

+0

Không. Chỉ cần một vài bộ điều khiển xem khá phức tạp trên một bảng phân cảnh duy nhất và một số lớp đối tượng dữ liệu tôi sắp xếp tuần tự. Vì tất cả dữ liệu (không nhiều) cần thiết để giữ nguyên bộ nhớ trong toàn bộ thời gian, ứng dụng đang chạy Core Data dường như quá mức cần thiết. – DBD

+0

bản sao có thể có của [Truy cập mặc định chậm cho cảnh báo ClientState chính trên iOS] (http://stackoverflow.com/questions/12873144/slow-defaults-access-for-key-clientstate-warning-on-ios) –

Trả lời

0

Cân nhắc tạo dự án mới với 2 bộ điều khiển chế độ xem và kiểm tra tốc độ chuyển đổi. Mỗi ứng dụng iOS đều có cửa sổ, bộ điều khiển chế độ xem gốc và bộ điều khiển chế độ xem. Vấn đề không có khả năng là hẹp và rõ ràng như bạn có thể hy vọng. Mỗi bộ điều khiển xem sẽ tải gì? Bạn đã kiểm tra mã cơ bản chưa? Ủy nhiệm ứng dụng có làm bất cứ điều gì khi khởi tạo hoặc thay đổi bộ điều khiển chế độ xem gốc không?

+0

Khi bạn nói "kiểm tra mã cơ bản", bạn có thể giải thích chính xác mã cơ bản là gì không? Trong khi tôi biết một số các bit rõ ràng loại bỏ cấu trúc xem cũ từ cửa sổ, thêm một cái mới, chạy các phương pháp khác nhau cho những người ... không ai trong số những phương pháp mất thời gian đáng kể. Đối với mã chậm, phương thức được gọi là không có gì khác hơn là khởi tạo bộ điều khiển xem nếu nó không tồn tại và thiết lập 'rootViewController'. – DBD

3

Có 70 lượt xem trên màn hình giống như âm thanh! Xét đề nghị của tôi là để làm cho nó đơn giản hơn một cách nào đó:

  • Bạn có thực sự cần tất cả 70 điểm cùng một lúc?

  • Kiểm tra xem tất cả các quan điểm cần autolayout, loại bỏ nó mà chưa từng thể

  • một số quan điểm có thể được thay thế bằng đồ họa? Tôi đã sử dụng lượt xem, ví dụ: cho bóng tối, có thể là hình ảnh

Bạn có thể chia StoryBoard thành một số nhỏ hơn, ví dụ: một cho đăng nhập, chi tiết, chỉnh sửa chế độ vv Một phần của sự chậm trễ có thể đến từ hệ thống phải đối phó với (quá) storyBoards lớn.

+0

70 lượt xem không phải là tầm thường, nhưng cũng không quá lớn. Hãy xem xét một ô bảng. Bạn có chế độ xem nền, chế độ xem nội dung, chế độ xem hình ảnh, chế độ xem nhãn, chế độ xem tiết lộ, (có thể hơn) và đó chỉ là ô mặc định. Ở chiều cao ô tiêu chuẩn là 10 được hiển thị cùng một lúc + bảng điều khiển, thanh điều hướng, tiêu đề và nút. Bạn đã đạt dưới 60 lượt xem cho một giao diện người dùng quá phổ biến. Bố cục tự động cũng dựa trên bảng phân cảnh. Tôi không thể loại bỏ bố cục tự động cho mỗi lần xem và tôi thực sự muốn sử dụng nó vì đã đơn giản hóa mã của tôi một cách đáng kể (phải loại bỏ nhiều mã 'setFrame'). – DBD

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