2012-03-05 36 views
5

Tôi đang cố gắng để mở rộng một lớp học có một phương pháp variadic như:Làm thế nào để ghi đè lên một phương pháp variadic trong Objective-C

- (void)someMethod:(id)arguments, ... ; 

và trong lớp con ghi đè lên nó bằng cách gọi phương thức ban đầu như:

- (void)someMethod:(id)arguments, ... { 
    [super someMethod:arguments, ...]; 

    // override implementation 
    ... 
} 

nhưng cách này không hiệu quả. Có ai biết cách làm việc này không? Cảm ơn.

+0

Vì vậy, ... Đây có phải là danh mục hoặc siêu lớp không? Vì Danh mục EXTEND và superclasses OVERSEE. – CodaFi

+0

ghi đè trong một lớp con. –

+0

Không thể nói chung để bọc hàm hoặc phương thức variadic như thế này. –

Trả lời

3

tương tự như printf/vprintf, cơ sở sẽ tuyên bố:

- (void)someMethod:(id)arguments, ... ; 

các lớp con sẽ thực hiện:

- (void)vsomeMethod:(id)arguments vaList:(va_list)vaList; 

thì cơ sở sẽ chỉ cần gọi vsomeMethod:vaList: trong việc thực hiện của someMethod:vaList:.

+0

Cảm ơn, nhưng trong trường hợp của tôi, lớp cơ sở không thể sửa đổi được. –

+2

@TaketoSano nó sẽ giống như thực hiện một hàm variadic, nhưng bạn sẽ chuyển tiếp 'va_list' sang' vsomeMethod: vaList: 'sau khi tạo nó, thay vì liệt kê các đối số. vì bạn không thể sửa đổi cơ sở, cách tiếp cận này sẽ không làm việc cho bạn bởi vì 'someMethod:' phải được định nghĩa bởi base để chuyển tiếp đúng. chỉ còn lại 'giải pháp' mà tôi biết được thực hiện xác định. – justin

+0

ok, cảm ơn bạn đã trả lời. –

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