Câu hỏi của tôi là làm thế nào các phiên bản hiện tại của Foundation (hoặc thư viện thời gian chạy Objective-C), vì điều này dường như có) thực hiện giữ lại số đối tượng NSObject
có nguồn gốc? Như tôi có thể thấy tại NSObject.mm, không có ngà được gọi là retain count
trong cơ thể giao diện của NSObject
. Thay vào đó, có vẻ như là một loại bảng hoặc bản đồ có chứa các quầy tham chiếu cho từng đối tượng. Nhưng nếu giữ lại số lượng thực sự được thực hiện với bản đồ, không phải hoạt động retain
và release
quá đắt với loại triển khai này (vì trong trường hợp này, cần phải khóa và mở khóa các mutex, tra cứu bản đồ để tìm đúng đối tượng, bên cạnh đó thực tế là, trong một môi trường đa luồng, chỉ một đối tượng có thể được giữ lại/phát hành tại một thời điểm)?Số lượng giữ lại được thực hiện trong NSObject như thế nào?
tôi không tìm thấy bất cứ điều gì liên quan đến thiết lập bộ đếm giữ đến 1 khi phân bổ một đối tượng mới, không phải trong _objc_rootAllocWithZone
tại NSObject.mm (mà có vẻ là chức năng mà được gọi bằng [NSObject alloc]
) cũng không phải trong _class_createInstanceFromZone
tại objc-runtime-new.mm (mà được được gọi sau bởi _objc_rootAllocWithZone
).
- (NSUInteger) retainCount {return rand()}; – CodaFi
Ôi trời ơi, tôi đã đặt sai chỗ kết thúc, ... Tôi sẽ không ngủ tối nay. – CodaFi