Về cơ bản, thư mục gốc của sự cố là bản hack cho muốn trả lại đối tượng thứ hai (tùy chọn).
Làm cách nào chúng tôi có thể thực hiện việc này vì chúng tôi chỉ có thể trả lại một thứ? Vâng, chúng tôi có thể trả lại một số loại (return_value, error)
tuple, nhưng đó là một chút khó sử dụng. Chúng tôi có thể có nhiều tham số như chúng tôi muốn, chúng tôi có thể làm điều gì đó với những ...
Vì vậy, phương pháp/chức năng không thể sửa đổi thông số của chúng (chính xác, chúng hoạt động với một bản sao, vì vậy bất kỳ sửa đổi nào làm là địa phương). Đó là để nói (vấn đề đồng thời sang một bên) giá trị của fetchRequest
trước khi tin nhắn trong câu hỏi của bạn sẽ bằng với giá trị của fetchRequest
sau đó. Lưu ý đối tượng được trỏ đến bởi fetchRequest
có thể thay đổi, nhưng giá trị của chính bản thân là fetchRequest
sẽ không.
Điều này đặt chúng tôi vào một chút ràng buộc. Ngoại trừ, chờ đợi, chúng tôi biết chúng ta có thể vui vẻ lấy giá trị của một tham số và sửa đổi những gì nó trỏ đến! Nếu bạn nhìn vào tuyên bố cho executeFetchRequest:error:
bạn sẽ thấy nó mất NSError**
. Đó là "một con trỏ đến một con trỏ đến một NSError
". Vì vậy, chúng ta có thể khởi tạo một/rỗng lơ lửng NSError*
, tìm địa chỉ của nó (với unary &
operator), và chuyển nó vào. Phương pháp sau đó có thể gán cho NSError*
được chỉ ra bởi điều này.
Thì đấy, chúng tôi có các giá trị trả lại bổ sung tùy chọn.
Nguồn
2012-04-07 23:33:59
Đây là * con trỏ C chuẩn * toán tử * unary * '&' là toán tử "address of".Rất nhiều đọc tốt và * hướng dẫn * về chủ đề này, và một vài từ khóa trong câu trước. –
có thể trùng lặp của [Con trỏ trong C: khi nào nên sử dụng dấu và dấu hoa thị] (http://stackoverflow.com/questions/2094666/pointers-in-c-when-to-use-the-ampersand-and-the -asterisk) –
@ user166390 Oh người đàn ông bạn thông minh !! – user3932000