2012-06-17 27 views

Trả lời

1

Điều đầu tiên bạn nghĩ đến là sử dụng @property và dấu chấm. Một lớp học với @property tên 'foo' cho phép bạn làm như thế này:

anInstance.foo = @"bar"; 

nghĩa đen dịch tại thời gian biên dịch để

[anInstance setFoo:@"bar"]; 

(tương tự với "thu khí")

Các cách khác là nâng cao hơn, chẳng hạn như sử dụng phương thức performSelector: của NSObject, hoặc các hệ thống khác như NSInvocation, vv Đi sâu hơn, có nhiều cách để gọi các phương thức trong thời gian chạy, với các hàm c (tất cả cú pháp này cuối cùng là c alling c-functions anyway); nhưng tôi chắc chắn đó không phải là những gì bạn đang có.

+0

Có cân nhắc hiệu suất khi sử dụng '[]' trên '.'? – raffian

+0

Thực ra, bạn đã sử dụng cụm từ ", đối tượng nhắn tin là cách duy nhất để gọi một phương thức?", Vì vậy câu trả lời kỹ thuật là "không". Nhắn tin dịch sang các cuộc gọi hàm thời gian chạy và bạn cũng có thể sử dụng chúng. Trong thực tế, bạn đã chạm vào một trong những "tính năng" cốt lõi của thời gian chạy, ràng buộc động của một thông điệp đến một phương thức. Các "phương pháp" (hoặc, thực hiện để được chính xác hơn) được nhìn lên lúc chạy cho mỗi tin nhắn được gửi đi. Kiểm tra điều này: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html –

+1

Chúng thực sự giống hệt nhau khi chương trình thực sự chạy. Ý tôi là theo nghĩa đen. –

1

Có. Bạn có thể sử dụng cú pháp dấu chấm để nhận hoặc thiết lập các thuộc tính Objective C. Vì vậy, ví dụ: đặt văn bản trên nhãn UILabel * có thể được thực hiện hoặc [label setText:@"some text"]; hoặc label.text = @"some text";

+0

gì về '->', như trong label-> setText ("một số văn bản "); ? – raffian

+0

Xem tại đây liên quan đến -> http://stackoverflow.com/questions/4486048/what-is-in-objective-c –

+0

Ký hiệu dấu chấm đơn giản, đối với các thuộc tính, ít nhất là địa ngục với các dấu ngoặc ;-) – raffian

1

Vì thầy giáo, tại sao không nhận được ở mức độ thấp:

objc_msgSend(object, sel_getUid("foo"), errVar); 
+0

bạn đang nói đùa phải không? đó là cú pháp rất ồn ào :-) – raffian

+0

Ha, một downvote! – CodaFi

+0

Bây giờ có hai! Có vẻ như một số người cần phải chải lên các chức năng thời gian chạy của họ! – CodaFi

4

Bạn có thể sử dụng KVC:

[label setValue:@"Some text" forKey:@"text"]; 
Các vấn đề liên quan