chỉnh sửa: oops, nên đã kiểm tra bản sao đầu tiên, Nate đã trả lời câu hỏi này là here. Mặc dù bạn có thể muốn lưu ý sự khác biệt nhỏ trong phiên bản của tôi, sử dụng withUnsafeMutablePointer
.
Bạn sẽ bị giảm giá vì mọi người không thích "Làm cách nào tôi có thể chuyển đổi câu hỏi Obj-C này thành Swift", tuy nhiên trong trường hợp này, điều này có thể đủ công bằng vì chuyển đổi cụ thể này đặc biệt là lông. Tôi nghĩ rằng đây là làm việc:
func report_memory() {
var info = task_basic_info()
var count = mach_msg_type_number_t(sizeofValue(info))/4
let kerr: kern_return_t = withUnsafeMutablePointer(&info) {
task_info(mach_task_self_,
task_flavor_t(TASK_BASIC_INFO),
task_info_t($0),
&count)
}
if kerr == KERN_SUCCESS {
println("Memory in use (in bytes): \(info.resident_size)")
}
else {
println("Error with task_info(): " +
(String.fromCString(mach_error_string(kerr)) ?? "unknown error"))
}
}
Có một vài coercions cơ bản - sizeof
trả về một Int
, nhưng các cuộc gọi chức năng cần có một UInt32
. Tương tự (và hơi giận dữ hơn một chút), TASK_BASIC_INFO
là Int32
, nhưng cuộc gọi cần có UInt32
.
Phần khó chịu đang chuyển trong tham số thứ ba. task_info
đưa con trỏ đến nhiều loại cấu trúc khác nhau có kích thước khác nhau tùy thuộc vào loại thông tin bạn muốn. Vì vậy, bạn cần lấy một con trỏ từ đối tượng task_basic_info
của bạn, sau đó đưa nó đến kiểu con trỏ cụ thể task_info
thực sự muốn (nghĩa là, khi bạn lội qua tất cả các typedef, một con trỏ đến UInt32
).
Các tài liệu cho task_info
nói rằng tham số cuối cùng count
được coi là một số trong những “số lượng tối đa số nguyên trong task_info” nhưng khi nó nói số nguyên Tôi đoán nó có nghĩa là số nguyên 32-bit do đó chia cho 4.
Nguồn
2015-04-22 11:45:32
Hey! Bạn đã tìm ra, làm thế nào để tìm thấy những giới hạn trước khi ứng dụng bắt đầu gửi cảnh báo bộ nhớ? nói cách khác, làm thế nào tôi có thể biết khi nào tôi "đẩy" việc sử dụng bộ nhớ ứng dụng, và tôi ngừng làm những gì bao giờ quá trình tôi đang làm? –
Trong Swift 3, bây giờ tôi có được ' 'init' không có sẵn: sử dụng 'withMemoryRebound (để: Công suất: _)' để tạm thời xem như bộ nhớ khác type.' bố trí tương thích –
Swift 3 giải pháp: http://stackoverflow.com/a/39048651/650558 –