Table of Contents
Quản lý bộ nhớ cách tô màu là một yếu tố quan trọng để cung cấp các ứng dụng iOS hiệu quả cao. Dùng bộ nhớ hiệu quả trực tiếp tác động đến ứng dụng ứng dụng, ắc quy, và sự thỏa mãn tổng thể của Apple. Trong khi bộ nhớ tự động đếm (ARC) tự động hóa nhiều việc nâng cao, các nhà phát triển vẫn phải có những chiến lược cố ý để tránh rò rỉ, giảm dấu ấn bộ nhớ cao nhất, và phản ứng lại một cách duyên dáng với áp lực hệ thống. Bài này cung cấp một hướng dẫn toàn diện, sẵn sàng để tối ưu hóa bộ bộ bộ bộ bộ nhớ cho ứng dụng iOS, bao gồm các khái niệm hành động, kỹ thuật hoạt động, kỹ thuật cao và cú ngã thông thường.
Hiểu cách quản lý bộ nhớ iOS
iOS dùng khả năng đếm tham chiếu tự động (ARC) để quản lý vòng đời của các vật. ARC tự động chèn [FLT: 0] và gọi vào thời gian biên dịch, thỏa thuận tính toán một đối tượng khi số lần tham khảo của nó giảm xuống 0. Tuy nhiên, ARC không ngăn cản mọi vấn đề trí nhớ — phát triển về các cấu trúc tham khảo, dữ liệu và xe đạp điện thoại tài nguyên vẫn còn quan trọng.
ARC hoạt động như thế nào
Mỗi trường hợp của kiểu tham chiếu (tiểu thức) có số đếm giữ lại. Khi bạn chỉ định một biến, ARC tăng số. Khi biến này vượt quá phạm vi hoặc được đặt thành ), ARC giảm dần số đếm. Đối tượng được phân loại khi đếm bằng số không. Việc định vị giao dịch định nghĩa này là ưu điểm quan trọng hơn hệ thống phân loại rác, nhưng nó giới thiệu rủi ro [FL: 0] [FL: 0] [FL] Nơi mà mỗi đối tượng giữ hai tham chiếu mạnh, ngăn chặn sự định vị.
Những tài liệu tham khảo, yếu và không có uy tín
ARC hỗ trợ ba loại tham chiếu:
- (mặc định: tăng số đếm giữ. Đối tượng vẫn còn sống miễn là có ít nhất một tham chiếu mạnh.
- Yếu ): không tăng số đếm giữ lại. Tham chiếu tự động được đặt thành khi đối tượng được thỏa thuận. Hãy dùng tham chiếu yếu để tránh chu kỳ giữ (v. d., thuộc tính ủy quyền).
- Không được biết đến ): tương tự với yếu đuối nhưng giả sử đối tượng tham khảo sẽ không bao giờ trở thành trong suốt cuộc đời. Dùng tham khảo sau khi sắp xếp giao dịch gây ra sự sụp đổ thời gian.
Hiểu được những sự khác biệt này là thiết yếu để ngăn ngừa sự rò rỉ trí nhớ và tai nạn.
Những thực hành tốt nhất để dùng trí nhớ cách làm báp têm
Áp dụng những thực hành này liên tục làm giảm áp lực bộ nhớ, cải thiện hiệu suất và giảm thiểu nguy cơ bị tắt bởi con chó giữ bộ nhớ iOS.
Phân tích đều đặn với các công cụ
Công cụ Xode là công cụ mạnh nhất để phân tích bộ nhớ.
- Theo dõi sự sáng tạo và định vị đối tượng.
- Lê [FLT: 1]: phát hiện tự động các đối tượng bị rò rỉ. Chạy công cụ này thường xuyên trong quá trình phát triển.
- Bộ theo dõi V): Theo dõi bộ nhớ ảo, bao gồm các trang bẩn, có thể có nhiều thông tin hơn là việc dùng đống dữ liệu lớn.
Hãy phân tích một phần của dòng công việc phát triển — đặc biệt trước khi được phát hành.
Đáp ứng lời cảnh báo về trí nhớ
iOS gửi một khi hệ thống thiếu bộ nhớ. Không đáp ứng có thể dẫn đến va chạm. Nhấn [FLT: 10] để xem bộ điều khiển cần thả:
- Các đối tượng bị đốt (v. d., hoặc các từ điển tuỳ biến
- Ảnh lớn có thể được tải lại từ đĩa
- Name
Thực hiện ví dụ:
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
imageCache.removeAllObjects()
thumbnailCache.removeAllObjects()
// Clear any other disposable resources
}
Ngoài ra, hãy xem xét việc lạm dụng để không cần đến tài nguyên miễn phí khi khung cảnh không còn cần thiết.
Tránh những vòng lặp
Chu kỳ phục hồi là những thông thường nhất bị rò rỉ bộ nhớ trong ứng dụng iOS.
- Ủy nhiệm ): tuyên bố các thuộc tính ủy quyền .
- Khi một kết thúc và được lưu giữ, hãy dùng danh sách ghi chép: .
- Áp dụng danh sách bắt giữ một cách nhất quán trong mỗi đóng cửa mà nắm giữ một tham chiếu riêng.
Ví dụ về một sự đóng cửa an toàn:
networkManager.fetchData { [weak self] result in
guard let self = self else { return }
self.updateUI(with: result)
}
Dùng chỉ khi bạn chắc chắn rằng sẽ không được phân loại trước khi kết thúc (v. d., hoạt họa ngắn).
Nạp dữ liệu làm báp têm
Đang nạp dữ liệu không cần thiết vào bộ nhớ lãng phí tài nguyên. Làm việc những kỹ thuật này:
- Sự đồng bộ chậm ): trì hoãn việc tạo ra các vật đắt tiền cho đến khi cần thiết.
- Với cơ sở dữ liệu lõi, hãy dùng giới hạn và kích cỡ hàng loạt để tránh tải mọi đối tượng vào bộ nhớ cùng một lúc.
- [FLT:] ): Hãy dùng thay vì để lưu tạm — nó tự động làm cho các đối tượng bị áp lực trí nhớ.
- Khi hiển thị hình thu nhỏ, tạo phiên bản đã co dãn bằng để tránh giữ ảnh phân giải đầy đủ trong bộ nhớ.
Để đáp ứng mạng, hãy dùng những máy phân tích như để giảm dần .
Đang phân bổ tài nguyên trong bộ điều khiển xem
Xem người điều khiển thường sở hữu nhiều nguồn tài nguyên: người quan sát, đồng hồ hẹn giờ, người nhận hành động và cấu trúc dữ liệu lớn. Luôn luôn làm sạch trong hoặc phương pháp xe đạp sống thích hợp:
- Gỡ bỏ giấy đăng ký quan sát (, KVO)
- Liên kết đồng hồ hẹn giờ và hiển thị không hợp lệ
- Hủy bỏ thao tác mạng khi để lại màn hình
- Đặt các đối tượng nặng có thể tái sử dụng trong
Kỹ thuật quản lý trí nhớ cao cấp
Đối với các ứng dụng đẩy mạnh các giới hạn, chẳng hạn như với các bộ dữ liệu lớn, việc vẽ thời gian thực, hoặc xử lý nền, thì cần phải có các kỹ thuật sâu sắc hơn.
Dùng hồ tự động
Các hồ tự động thoát nước tự động ở cuối một vòng lặp, nhưng chúng có thể tích lũy nhiều vật thể trong vòng quay nặng (v. d., xử lý một dãy lớn). Hãy quấn cơ vòng trong một hồ tự động để giải phóng vật sớm hơn:
for i in 0..<100000 {
autoreleasepool {
let heavyObject = createHeavyObject(i)
// use heavyObject
}
}
Điều này làm giảm đáng kể khả năng sử dụng bộ nhớ cao nhất. [FLT: 0] Tài liệu về các hồ sơ tự động [FLT: 1] giải thích chi tiết về cơ chế này.
Các loại giá trị tương ứng với các loại tham chiếu
Xây dựng (kiểu giá trị) được lưu trữ và có thể giảm số lượng phân phối chồng. Hãy thử dùng các đồ vật có giá trị đơn giản để xếp các đồ vật. Tuy nhiên, hãy biết rằng các đồ đạc lớn có thể gây ra chồng chồng chồng chồng hay sao chép. Hãy dùng bao bọc hoặc để xây dựng phức tạp.
Tập tin lớn làm nền của bộ nhớ
Đối với tập tin dữ liệu lớn (videos, co sở dữ liệu), sử dụng bản đồ bộ nhớ để tải dữ liệu mà không tiêu thụ không gian trao đổi. trong tập tin có thể tạo với tùy chọn . Tính năng này cho phép người lười biếng nạp và tránh sử dụng bộ nhớ hai lần (dik entry vs. in-emory).
if let data = try? Data(contentsOf: fileURL, options: .mappedIfSafe) {
// use data — pages are loaded on demand
}
Bản đồ bộ nhớ đặc biệt hiệu quả với dữ liệu chỉ đọc như từ điển hoặc tài sản có sẵn.
Tác vụ và Tập hợp trí nhớ nền
Khi thực hiện tác vụ nền (v. d., , bộ nhớ bị hạn chế. Giảm khả năng sử dụng bộ nhớ trong tiến trình thực hiện nền để tránh kết thúc. Hãy dùng để xử lý tình huống ít thiếu tập hoặc hoãn hoạt động lớn đến hậu phương.
Những vấn đề về trí nhớ và giải pháp thông thường
Ngay cả khi lên kế hoạch kỹ lưỡng, trí nhớ vẫn có thể lộ ra.
Đối tượng thây ma và điểm chấm phẩy
Các vật thể bị quá tải gây ra sụp đổ. Hãy hiệu lực chẩn đoán các đối tượng thây ma trong thiết lập của X code để phát hiện chúng. Nguyên nhân gốc thường là sự tương ứng giữa các tài liệu tham khảo mạnh và yếu, đặc biệt với các đại biểu được phóng thích sớm hoặc không được đặt đúng chỗ .
Phát hiện ra bộ nhớ bị hư hỏng bởi các công cụ
Chạy dụng cụ Leaks trong khi chạy các luồng điển hình của người dùng. Hãy chú ý đặc biệt đến:
- Xem chuyển đổi điều khiển (pish/pop)
- Những trình bày kiểu Modal
- Kết quả tìm kiếm
- Thư viện Đảng thứ ba
Nếu có rò rỉ, hãy xem xét đồ thị tham khảo trong công cụ Bức Đồ họa bộ nhớ gỡ lỗi (bộ sửa lỗi đồ thị củaXode).
Trí nhớ bén nhạy và nguyên nhân căn bản
Những dấu hiệu đột ngột của bộ nhớ thường do:
- Hình ảnh tải [FLT: 1]: luôn luôn xuống kích cỡ cần thiết để hiển thị. Hãy dùng cho hình thu nhỏ.
- JSON parsing):: giảm mạnh JSON trong bits hoặc sử dụng các phân tích truyền tải cho các phản ứng lớn.
- Đặt giới hạn và làm sạch bộ đệm chủ động.
- Đang tái định giờ hoặc CADis PlayLok ): bảo đảm chúng không được sử dụng khi không dùng.
Theo dõi bộ nhớ cao nhất với công cụ định vị Alcations và đặt các điểm ngắt cảnh báo bộ nhớ để bắt đầu các gai.
Kết luận
Việc sử dụng các tài liệu cơ bản — sử dụng các tài liệu tham khảo yếu, trả lời lời lời các lời cảnh báo bộ nhớ, phân tích với các cấu trúc cấu hình — rồi tiếp tục chấp nhận các kỹ thuật nâng cao như hồ sơ tự động và bản đồ cho các tình huống hiệu quả cao. Để xác định trình tự động hoá trí nhớ thành công việc phát triển của bạn và tiếp tục cập nhật với công cụ phát triển của Apple, bạn có thể xây dựng ứng dụng nhanh, ổn định và tôn trọng các nguồn tài nguyên. Để đọc thêm, xem [FL-L] Chương trình quản lý trí nhớ [FM] và xem lại các phiên bản không chỉ để tăng cường trí nhớ tiêu cực và cải tiến bộ nhớ.