2012-04-07 17 views
8

Vâng, tôi thấy điều này:Tôi có thể dựa vào nil UIView trả về CGRectZero cho khung của nó?

Nếu phương thức trả về một cấu trúc, theo quy định của Hướng dẫn Mac OS X ABI Chức năng Gọi để được trả lại trong sổ đăng ký, sau đó một tin nhắn gửi đến nil trả 0.0 cho mọi lĩnh vực trong cấu trúc. Các kiểu dữ liệu struct khác sẽ không được điền bằng số không.

Tôi không hiểu.

Trả lời

14

Nếu bạn đang sử dụng phiên bản mới nhất của trình biên dịch LLVM (Xcode 4.2 hoặc mới hơn), thì có, nhắn tin nil với phương thức trả về cấu trúc sẽ tạo ra cấu trúc không đầy. Trong trường hợp của CGRect, có nghĩa là một rect bằng CGRectZero.

Nguồn: Greg Parker, người làm việc tại Apple trong thời gian chạy ObjC.

+0

Xem tài liệu tôi đã trích dẫn trong câu hỏi. Nó là từ ngôn ngữ lập trình mục tiêu-C chính thức. Bạn có thể thấy nó đã tuyên bố rằng struct được trả về sẽ không được lấp đầy, nhưng chỉ cho những "được định nghĩa bởi Hướng dẫn gọi hàm Mac OS X ABI được trả về trong thanh ghi". Tôi không chắc những gì các tweet ở trên có nghĩa là. Liệu nó có nghĩa là bất kỳ cấu trúc nào bây giờ sẽ không được lấp đầy, bao gồm cả "Các kiểu dữ liệu cấu trúc khác sẽ không được lấp đầy với số không trong những ngày cũ"? – an0

+3

Có; nó được sử dụng để được rằng trong nhiều trường hợp, tin nhắn nil sẽ không trả lại một cấu trúc không đầy, ngoại trừ trong trường hợp may mắn, nơi ABI rằng giá trị trả về struct được thông qua trong thanh ghi. (Chỉ dành cho các cấu trúc rất nhỏ.) Giá trị trả về dựa trên ngăn xếp không được lấp đầy bằng không. Nhưng với trình biên dịch LLVM trong Xcode 4.2 hoặc cao hơn, chúng bây giờ * luôn luôn * không được lấp đầy. –

+1

Ngoài các tweet ở trên, nó cũng đã được đề cập trong một trong các phiên tại WWDC 2011. –

Các vấn đề liên quan