5

Có cách nào để tìm hiểu - trong thời gian chạy - liệu một phương thức đã cho có thuộc loại variadic không? Một cái gì đó như method_getTypeEncoding(); điều đó sẽ không cho tôi biết liệu một phương thức có chấp nhận số lượng đối số biến hay không. Hoặc là có thể có một mẹo để nói như vậy?Xác định nếu một phương pháp Objective-C là variadic trong thời gian chạy

+1

Bạn có thể giải thích thêm một chút về bối cảnh bạn muốn có thông tin này không? Tôi không chắc chắn về cách chính xác để tìm thấy rằng tại thời gian chạy nhưng tôi cũng không bao giờ cần thiết để xây dựng rất nhiều phương pháp variadic. Về cơ bản những gì tôi nhận được là có lẽ bạn không cần phải biết và có một vấn đề lớn hơn. Có lẽ nhưng tôi luôn luôn có thể sai quá :) –

+0

Điều gì sẽ xảy ra khi bạn gọi 'method_getNumberOfArguments()' trên một phương thức veridic? Tôi chưa bao giờ thử nó, nhưng có lẽ nó trả về một giá trị đặc biệt (như -1 hay cái gì đó)? Xem thêm 'method_copyArgumentType()'. – user1118321

+1

@ user1118321 'method_getNumberOfArguments' trả về số lượng tối thiểu, giống như phương pháp bình thường. –

Trả lời

6

Nhận xét của Robert là chính xác. Xem xét:

@interface Boogity 
@end 
@implementation Boogity 
- (void)methodWithOneIntArg:(int)a {;} 
- (void)variadicMethodWithIDSentinel:(id)a, ... {;} 
@end 

Chạy strings trên nhị phân kết quả sản xuất (đó cũng là cổ phiếu main()):

strings asdfasdfasdf 
Boogity 
methodWithOneIntArg: 
variadicMethodWithIDSentinel: 
[email protected]:8i16 
[email protected]:[email protected] 
Hello, World! 

Nếu tôi thay đổi phương pháp variadic được khai báo là - (void)variadicMethodWithIDSentinel:(int)a, ..., các strings đầu ra trở thành:

Boogity 
methodWithOneIntArg: 
variadicMethodWithIDSentinel: 
[email protected]:8i16 
Hello, World! 

Vì vậy, không, không có cách nào để kể.

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