2011-01-17 30 views
74

Tôi muốn kiểm tra chức năng ứng dụng của mình tốt trong điều kiện bộ nhớ thấp, nhưng rất khó để kiểm tra. Làm thế nào tôi có thể tạo ra cảnh báo bộ nhớ thấp kích hoạt phương thức didReceiveMemoryWarning trong chế độ xem của tôi khi ứng dụng đang chạy trên thiết bị chứ không phải trình mô phỏng? Hoặc một số cách tôi có thể thử nghiệm ứng dụng của mình trong những điều kiện có thể là gì?Phát triển iOS: Làm thế nào tôi có thể tạo cảnh báo bộ nhớ thấp trên thiết bị?

Lý do tôi không thể sử dụng trình mô phỏng là ứng dụng của tôi sử dụng Trung tâm trò chơi và lời mời không hoạt động trên trình giả lập.

Trả lời

7

Để thử nghiệm trên thiết bị, chỉ cần thêm một số mã phân bổ định kỳ các phần bộ nhớ lớn mà không giải phóng bộ nhớ (ví dụ: mục đích bị rò rỉ). Bạn có thể làm điều này trong một chủ đề riêng biệt, hoặc để đáp ứng với một bộ đếm thời gian, hoặc sử dụng bất cứ cơ chế nào tốt nhất cho phép bạn kiểm tra và quan sát hành vi của ứng dụng của bạn.

Bạn cũng có thể chọn tạo ứng dụng riêng biệt tương tự và được thiết kế để chạy ẩn, nếu bạn muốn dễ dàng sử dụng lại và/hoặc thử nghiệm với nhiều ứng dụng.

+6

không thực tế lắm. giải pháp để gọi một phương pháp riêng để thử nghiệm là tốt hơn –

+4

Không phải là một giải pháp tốt nếu bạn muốn xem xét kịch bản thế giới thực. Bạn đang làm tê liệt ứng dụng do rò rỉ không phải do áp lực bộ nhớ. Đó là điều xấu vì những gì bạn muốn làm là kiểm tra cách ứng dụng phản hồi trong trạng thái áp suất bộ nhớ cao. Nhược điểm của nó khó khăn hơn để tìm ra những gì vấn đề là một rò rỉ thực sự hoặc một giả bạn giới thiệu. Phương pháp riêng tư tốt hơn cho thử nghiệm như được đưa ra dưới đây. – fzaziz

+0

Xem câu trả lời dưới đây: http://stackoverflow.com/a/8727632/746968 – Zappel

7

Có một lệnh menu sẽ gọi nó.

Hardware > Simulate Memory Warning từ trình mô phỏng.

+2

Tuyệt vời, cảm ơn bạn! Làm thế nào về trên thiết bị chính nó? – BeachRunnerFred

+3

Câu hỏi về mô phỏng trên thiết bị. – KPM

21

Mục trình đơn Simulate Memory Warning của Trình mô phỏng iOS cho phép bạn mô phỏng cảnh báo bộ nhớ.

+2

Tuyệt vời, cảm ơn bạn! Làm thế nào về trên thiết bị chính nó? – BeachRunnerFred

+0

Cách duy nhất để kiểm tra nó trên thiết bị là thực sự buộc nó, tức là bằng cách sử dụng các ứng dụng trong thời gian dài hoặc hình ảnh chuyên sâu hoặc những gì có bạn, sẽ thay đổi ứng dụng cho ứng dụng. Một gợi ý có thể là sử dụng một thiết bị cũ (3g có lẽ?) Thay vì một chiếc iPhone 4 để giúp bạn nhận được cảnh báo nhanh hơn. –

+0

Cảm ơn, Jesse, tôi nghĩ tôi sẽ bổ sung thêm một số phần mềm vào ứng dụng của tôi để mô phỏng lời mời để tôi có thể chạy nó trong trình mô phỏng và kích hoạt cảnh báo bộ nhớ theo cách đó. – BeachRunnerFred

259

Bạn có thể gọi method private:

[[UIApplication sharedApplication] performSelector:@selector(_performMemoryWarning)]; 

Chỉ cần nhớ để sử dụng nó trên debug chỉ, nếu không ứng dụng của bạn sẽ bị từ chối.

+6

Nó xuất hiện mã này mô phỏng chính xác cảnh báo bộ nhớ trên thiết bị. Cảm ơn Enzo! –

+41

Đây phải là câu trả lời được chấp nhận. – Bill

+0

Tôi đã thử mã này và đặt nó vào một trong viewDidAppear của trình điều khiển xem của tôi. Làm cách nào để biết liệu tôi đã mô phỏng ứng dụng của mình trên bộ nhớ thấp? Tôi đã xem nhật ký của mình nhưng tôi không thấy cảnh báo. – Grauzten

16

Sử dụng dụng cụ, sử dụng mục menu: Công cụ -> Mô phỏng Cảnh báo bộ nhớ.

Để sử dụng Công cụ trên ứng dụng của bạn từ Xcode, hãy sử dụng mục menu Sản phẩm -> Tiểu sử.

+0

Điều này thậm chí còn tốt hơn. – Zappel

+0

Tôi nghi ngờ rằng điều này không thực sự hiệu quả. – OrangeDog

+0

@OrangeDog Điều gì đang xảy ra? – ThomasW

8

Tôi đã viết lại Enzo Tran's answer trong Swift:

UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil) 
+0

Cảm ơn! Xcode cảnh báo về "không có phương thức nào được khai báo với bộ chọn Objective-C", nhưng điều này vẫn hoạt động. – man1

5

Converted @ChikabuZ để nhanh chóng 3:

UIControl().sendAction(Selector(("_performMemoryWarning")), to: UIApplication.shared, for: nil) 
2

Nếu một ai đó, vì lý do gì, cố gắng để làm điều này trong Swift 3 - đây là cách phân bổ 1,2 GB ram.

for i in 0...1200 { 
     var p: [UnsafeMutableRawPointer] = [] 
     var allocatedMB = 0 
     p.append(malloc(1048576)) 
     memset(p[allocatedMB], 0, 1048576); 
     allocatedMB += 1; 
    } 
+3

let d = Data.init (lặp lại: 100, đếm: 1200000000) – Adobels

+2

@Adobels bạn nên đăng câu trả lời đó :) –

0

Swift 4:

UIApplication.shared.perform (Selector (("_ performMemoryWarning")))

có thể thực hiện ở trên để đáp ứng với một sự kiện/thông báo.

0

Nếu ai đó, vì bất cứ lý do gì, hãy thử làm điều này trong Swift 4 - đây là cách phân bổ 1,2 GB ram.

let d = Data.init(repeating: 100, count: 1200000000) 
Các vấn đề liên quan