创建自定义UITableView单元时,我在UITableViewCell类的@interface中手动定义委托变量(每个单元必须与父类通信,因此需要连接两个类之间的连接)。然后当一个单元格附加到UITableView时,我只需设置该委托变量。
@interface MyCellClass : UITableViewCell {
MyParentController *delegat;
}
@property (nonatomic, retain) MyParentController *delegat;
有更好的方法吗?
答案 0 :(得分:3)
这可能没问题,但请确保您不进行保留周期。 (保留B,B保留A,其中没有一个从未被释放)
如果你只是只使用MyParentController的功能,那么最好制作一个协议并将委托设置为采用(实现)@protocol的对象,这不是强制性的,但这是一种很好的做法,更好的设计方式。
您可以创建协议,如:
//MyProtocol.h
@protocol MyProtocol <NSObject>
@required
- (void) requiredMethod:(NSString *)param;
@optional
- (void) optionalMethod:(NSString *)param;
@end
然后上课:
#import "MyProtocol.h"
@interface MyCellClass : UITableViewCell {
id<MyProtocol> delegate;
}
@property (nonatomic, assign) id<MyProtocol> delegate; //see I changed it to assign?
此外,当你有代表时,你应该避免让它们保留,否则你将保留周期,从而导致内存泄漏。
答案 1 :(得分:1)
这就是我通常这样做的方式。只需创建单元格并设置其委托,然后再将其返回到
中- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath