共通の祖先 UIView でカテゴリを使用できると思います。インスタンス変数ではなく、共通のメソッドのみを共有できます。
使い方を見てみましょう。
たとえば、カスタム UITableViewCell があります
@interface PersonTableCell: UITableViewCell
@property (nonatomic, weak) IBOutlet UILabel *personNameLabel;
- (void)configureWithPersonName:(NSString *)personName;
@end
@implementation PersonTableCell
- (void)configureWithPersonName:(NSString *)personName {
self.personNameLabel.text = personName;
}
@end
そしてUICollectionViewCell
@interface PersonCollectionCell: UICollectionViewCell
@property (nonatomic, weak) IBOutlet UILabel *personNameLabel;
- (void)configureWithPersonName:(NSString *)personName;
@end
@implementation PersonCollectionCell
- (void)configureWithPersonName:(NSString *)personName {
self.personNameLabel.text = personName;
}
@end
2 つは共通のメソッドconfigureWithPersonNameを共有します。祖先の UIView に対して、カテゴリを作成できます。
@interface UIView (PersonCellCommon)
@property (nonatomic, weak) IBOutlet UILabel *personNameLabel;
- (void)configureWithPersonName:(NSString *)personName;
@end
@implementation UIView (PersonCellCommon)
@dynamic personNameLabel; // tell compiler to trust we have getter/setter somewhere
- (void)configureWithPersonName:(NSString *)personName {
self.personNameLabel.text = personName;
}
@end
セル実装ファイルにカテゴリ ヘッダーをインポートし、メソッド実装を削除するようになりました。そこから、カテゴリの共通メソッドを使用できます。複製する必要があるのは、プロパティ宣言だけです。