2011-08-31 24 views
5

Tôi thấy hai phương pháp xử lý đối tượng người gửi trong các câu lệnh IBAction. Là người đầu tiên trông như thế này:Gửi người gửi đến IBAction dưới dạng id hoặc lớp cụ thể

-(IBAction)buttonPressed:(id)sender{ 
UIButton*someButton=(UIButton*)sender; 
//do something with someButton.tag or whatever 
} 

dường như khác dễ dàng hơn:

-(IBAction)buttonPressed:(UIButton*)sender{ 
    //do something with sender.tag or whatever 
    } 

Tôi thường lựa chọn phiên bản 2. Bất kỳ lý do cụ thể để thích một phong cách trong khác, nếu bạn biết rằng chỉ có một nút sẽ được gửi đến phương pháp này?

tôi có thể nhìn thấy nơi phiên bản 1 là tốt nếu bất cứ điều gì có thể là một người gửi, giống như một nút, hoặc chuyển đổi hoặc thanh trượt, vv Tuy nhiên, nếu bạn đang tìm kiếm UIButton tính như tag nó sẽ không làm cho nhiều khác biệt nếu người gửi của bạn không phải là UIButton. Vì vậy, phiên bản 2 có vẻ đơn giản hơn rất nhiều.

Chỉ cần nghĩ rằng tôi sẽ thấy nếu tôi thiếu lý do rõ ràng để thích phiên bản 1.

+0

Không thực hiện bất kỳ sự khác biệt, nhưng đôi khi bạn đang sử dụng các hành động tương tự đối với nhiều đối tượng khác nhau và sử dụng để chọn cái nào trong số đó là đúng, vì vậy nó thực sự phụ thuộc vào nhu cầu của bạn. Interface Builder không quan tâm. –

Trả lời

4

Tôi thấy không có vấn đề khi sử dụng phiên bản thứ hai. Tôi thường sử dụng phiên bản thứ hai, chỉ sử dụng phiên bản đầu tiên nếu người gửi có thể có nhiều loại đối tượng. Sau đó, nếu phương thức cần biết loại đối tượng nào, phương thức có thể truy vấn người gửi trước khi truyền người gửi đến một loại cụ thể.

Thậm chí thường xuyên hơn tôi thấy không cần phải truy cập vào gửi, vì vậy tôi chỉ cần sử dụng:

- (IBAction)buttonPressed { 
    // Do something. 
} 
+0

Tôi đồng ý với điều này. Trừ khi bạn có nhu cầu trả lời lại, chỉ cần để người gửi tắt. –

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