2011-01-10 26 views
5

Ứng dụng của tôi tạo một số tệp tạm thời mà tôi cần trong toàn bộ vòng đời của nó. Cuối cùng tôi cần phải vứt bỏ những tệp đó, vì vậy chúng không chiếm dung lượng trên thiết bị. Tôi nghĩ rằng tôi có thể xóa chúng khi ứng dụng thoát, nhưng kể từ khi đa nhiệm đã được giới thiệu vòng đời không đơn giản như trước đây. Câu hỏi chính của tôi là: Khi ứng dụng của tôi chuyển sang nền và bị giết sau này, nó có nhận được applicationWillTerminate: không? Hay nó chỉ bị xóa khỏi bộ nhớ?Làm thế nào để thực hiện dọn dẹp khi ứng dụng bị giết trong nền?

Tôi không thể dọn dẹp khi ứng dụng di chuyển sang nền, vì ứng dụng có thể được đặt nền ở giữa một thao tác và sẽ cần các tệp tạm thời khi tệp được quay lại nền trước. Tôi nghĩ rằng tôi có thể làm sạch các tập tin khi khởi động, nhưng tôi quan tâm đến hành vi applicationWillTerminate: anyway.

+0

thậm chí tôi đã gặp sự cố tương tự khi tạo trò chơi trong iPhone 4. Ứng dụng không nhận được ứng dụngWillTerminate: gọi khi người dùng thoát khỏi ứng dụng và không thể lưu vị trí người dùng. Nhưng trong trường hợp của bạn tôi không nghĩ rằng bạn phải lo lắng về bộ nhớ bị rò rỉ như bộ nhớ sẽ được làm sạch nếu không có con trỏ trỏ đến nó và các tập tin tạm thời sẽ bị xóa tự động – Robin

+0

Ông lo lắng về các tập tin tạm thời, không rò rỉ bộ nhớ. Tuy nhiên, thư mục AFAIK, tmp sẽ bị xóa trong quá trình đồng bộ hóa với iTunes. –

Trả lời

5

Không, applicationWillTerminate: không được gọi trên các thiết bị iOS 4 đã bật nhiều tác vụ. Khi ứng dụng của bạn bị chấm dứt, điều đó thường có nghĩa là thiết bị đang hết bộ nhớ, vì vậy ngay cả khi là đã làm gọi là không có gì nói rằng bạn có đủ bộ nhớ để hoàn thành tác vụ.

Apple khuyên bạn nên dọn dẹp khi ứng dụng của bạn chạy ngầm. Bạn có thể yêu cầu thêm thời gian để thực hiện việc này nếu bạn cần vài giây (đây là một trong số ít kịch bản đa tác vụ mở cho tất cả các ứng dụng).

Các tùy chọn khác của bạn sẽ là dọn dẹp khi công việc được hoàn thành (bất cứ khi nào có) hoặc khi ứng dụng được khởi động. Tôi đoán có thể có các hoán vị khác ...

+0

Dọn dẹp khi thoát ứng dụng sẽ dễ dàng hơn đối với tôi, nhưng không có lựa chọn nào khác, tôi sẽ dọn dẹp sau khi thao tác kết thúc. Cảm ơn! – zoul

1

Internet cho biết, ứng dụng đóWillTerminate: không được gọi trong khi ứng dụng bị giết ở chế độ nền. Cách khác là lưu một số thông tin (trong NSUserDefaults, hoặc như vậy), các tệp tạm thời nào bạn đã mở và sau khi khởi động, hãy kiểm tra xem các tệp đó có còn lại hay không và xóa chúng. Ngoài ra, bạn có thể tìm hiểu cách iOS giết ứng dụng của bạn (tôi cho rằng điều này được thực hiện bằng cách gửi tín hiệu, tuy nhiên tôi không chắc chắn) và thêm trình xử lý tín hiệu vào ứng dụng của bạn.

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