Chỉnh sửa: Câu trả lời trước của tôi có thể là sai.
Một số đoạn trích chọn từ ARC docs nói:
3. Retainable đối tượng con trỏ
Một con trỏ đối tượng retainable (hoặc con trỏ retainable) là một giá trị của một loại con trỏ đối tượng retainable (loại retainable). Có ba loại của các loại con trỏ đối tượng retainable:
- khối con trỏ (hình thành bằng cách áp dụng các dấu mũ (^) declarator sigil cho một loại chức năng)
4,2. Semantics
Chuyển nhượng xảy ra khi đánh giá toán tử gán. Các ngữ nghĩa khác nhau tùy theo trình độ:
- Đối với các đối tượng _strong, điểm đánh dấu mới đầu tiên được giữ lại; thứ hai, các lvalue được nạp với ngữ nghĩa nguyên thủy; thứ ba, pointee mới được lưu vào lvalue với ngữ nghĩa nguyên thủy; và cuối cùng, con trỏ cũ được phát hành. Điều này không được thực hiện một cách nguyên tử; đồng bộ hóa bên ngoài phải được sử dụng để thực hiện điều này an toàn khi đối mặt với các tải và cửa hàng đồng thời.
4.4.1.Đối tượng
Nếu đối tượng được khai báo với loại chủ sở hữu đối tượng có thể lưu lại nhưng không có vòng loại quyền sở hữu rõ ràng, loại của nó được điều chỉnh hoàn toàn để có chứng chỉ __strong.
7.5. Các khối
Ngoại trừ việc giữ lại được thực hiện như là một phần của việc khởi tạo biến thông số __strong hoặc đọc biến __weak, bất cứ khi nào các ngữ nghĩa này gọi giữ lại giá trị kiểu con trỏ khối, nó có tác dụng của Block_copy. Trình tối ưu hóa có thể xóa các bản sao như vậy khi thấy kết quả chỉ được sử dụng làm đối số cho cuộc gọi.
Vì vậy, tôi nghĩ câu trả lời là có thể là, tùy thuộc vào trình tối ưu hóa.
Tôi đồng ý không rõ "những ngữ nghĩa" này đề cập đến – sbooth
+1, từ ngữ phần là vô cùng khó hiểu. – orip
Tôi đã nói chuyện với kỹ sư của Apple đã viết phần này. Ông nói "những ngữ nghĩa" đề cập đến toàn bộ tài liệu. Do đó, 'Block_copy' sẽ được chèn tự động. Dường như đây có thể là lỗi sớm với các khối sau đó đã được sửa. – bearMountain