先查看页面结构
点击views
从DDhomeVC看起 -[DDHomeVC viewDidLoad]
void -[DDHomeVC viewDidLoad](void * self, void * _cmd) {
r0 = [self view];
r0 = [r0 retain];
r2 = r21;
[r0 setBackgroundColor:r2];
[r0 release];
[r21 release];
r21 = [DDHomeContentView alloc];
r0 = [self view];
r0 = [r0 retain];
r22 = r0;
[r0 bounds];
r0 = [r21 initWithFrame:r2];
r21 = sign_extend_64(*(int32_t *)ivar_offset(_contentView));
*(self + r21) = r0;
[*(self + r21) release];
[r22 release];
[*(self + r21) setMainVC:self];
r0 = [self view];
r0 = [r0 retain];
[r0 addSubview:*(self + r21)];
[r0 release];
return;
}
翻译:创建DDHomeContentView添加到DDhomeVC页面上,并设置了主vc -[DDHomeContentView setMainVC:].
还有下面这个加载数据的调用
void -[DDHomeVC startLoadMainData](void * self, void * _cmd) {
*(r31 + 0xffffffffffffffe0) = r20;
*(0xfffffffffffffff0 + r31) = r19;
*(r31 + 0xfffffffffffffff0) = r29;
*(r31 + 0x0) = r30;
r0 = [self contentView];
r0 = [r0 retain];
[r0 startLoadData];
[r0 release];
return;
}
然后看DDHomeContentView -[DDHomeContentView initWithFrame:]
void * -[DDHomeContentView initWithFrame:](void * self, void * _cmd, struct CGRect arg2) {
*r31 = self;
*(r31 + 0x10) = __objc_class_DDHomeContentView_class;
r0 = [[r31 super] initWithFrame:r2];
r19 = r0;
if (r0 != 0x0) {
r20 = [[UIColor clearColor] retain];
[r19 setBackgroundColor:r20];
[r20 release];
r0 = objc_alloc();
r0 = [r0 initWithLinkUrl:zero_extend_64(0x0)];
r23 = sign_extend_64(*(int32_t *)ivar_offset(_mainModel));
*(r19 + r23) = r0;
[*(r19 + r23) release];
[r19 configGradientView];
r0 = [r19 gradientView];
r0 = [r0 retain];
[r0 setMainModel:*(r19 + r23)];
[r22 release];
[r19 configTopCustomBar];
r0 = [r19 naviBarView];
r0 = [r0 retain];
[r0 setMainModel:*(r19 + r23)];
[r22 release];
[r19 configContentView];
r0 = [r19 mixView];
r0 = [r0 retain];
[r0 setMainModel:*(r19 + r23)];
[r22 release];
}
r0 = r19;
return r0;
}
其中设置了
configGradientView gradientView (倾斜的view)
configContentView
mixView
setMainModel
下面是获取数据
void -[DDMixGateService getAssembleInfo:parameter:](void * self, void * _cmd, void * arg2, void * arg3) {
r21 = arg3;
r22 = arg2;
r19 = self;
r20 = [NSMutableString string];
if ((r22 != 0x0) && ([r22 length] != 0x0)) {
*r31 = r22;
[r20 appendString:[NSString stringWithFormat:@"page_id=%@", r3]];
}
if (r21 != 0x0) {
*r31 = r21;
[r20 appendFormat:@"&%@"];
}
[r19 getMixData:@"mixservice/gate/home_data" paramater:r20];
return;
}
看一看下面截图DDHomeContentView的属性DDHomeMixContentView
下面是DDHomeContentView -[DDHomeMixContentView initWithFrame:]:
void * -[DDHomeMixContentView initWithFrame:](void * self, void * _cmd, struct CGRect arg2) {
memcpy(&r2, &arg2, 0x8);
r31 = r31 - 0x30;
*(r31 + 0x10) = r20;
*(0x20 + r31) = r19;
*(r31 + 0x20) = r29;
*(0x30 + r31) = r30;
r29 = r31 + 0x20;
*r31 = self;
*(r31 + 0x10) = __objc_class_DDHomeMixContentView_class;
r0 = [[r31 super] initWithFrame:r2];
r19 = r0;
if (r0 != 0x0) {
r19->_bottomMargin = 0x0;
*(int8_t *)(int64_t *)&r19->_needBury = zero_extend_64(0x1);
[r19 setClipsToBounds:zero_extend_64(0x1)];
[r19 configTableView];
[r19 configFloatView];
[r19 configRefreshView];
[r19 setCanScroll:zero_extend_64(0x1)];
r0 = [NSNotificationCenter defaultCenter];
r0 = [r0 retain];
[r0 addObserver:r19 selector:@selector(changeHomeCollectionViewScrollStatus:) name:stack[2048] object:stack[2049]];
[r0 release];
}
r0 = r19;
return r0;
}
这里有一个把view作为model属性的代码
-[DDHomeMixMainModel setMixContentView:]
void -[DDHomeMixContentView configTableView]
void -[DDHomeMixContentView configTableView](void * self, void * _cmd) {
*((r31 - 0x60) + 0x30) = r22;
*(0x40 + (r31 - 0x60)) = r21;
*((r31 - 0x60) + 0x40) = r20;
*(0x50 + (r31 - 0x60)) = r19;
*((r31 - 0x60) + 0x50) = r29;
*(0x60 + (r31 - 0x60)) = r30;
r20 = objc_alloc();
[self bounds];
r0 = [r20 initWithFrame:zero_extend_64(0x0) style:r3];
r21 = sign_extend_64(*(int32_t *)ivar_offset(_tableView));
*(self + r21) = r0;
[*(self + r21) release];
[*(self + r21) setDelegate:self];
[*(self + r21) setDataSource:self];
[*(self + r21) setShowsVerticalScrollIndicator:zero_extend_64(0x0)];
[*(self + r21) setSeparatorStyle:zero_extend_64(0x0)];
r2 = [DDSignal getSignal:zero_extend_64(0x37)];
[*(self + r21) setScrollsToTop:r2];
[*(self + r21) setEstimatedRowHeight:r2];
[*(self + r21) setEstimatedSectionFooterHeight:r2];
[*(self + r21) setEstimatedSectionHeaderHeight:r2];
r20 = [[UIColor clearColor] retain];
[*(self + r21) setBackgroundColor:r20];
[r20 release];
[self addSubview:*(self + r21)];
[*(self + r21) setContentInset:*(self + r21)];
*((r31 - 0x60) + 0x8) = __NSConcreteStackBlock;
*((r31 - 0x60) + 0x10) = *0x10399d020;
*((r31 - 0x60) + 0x18) = 0x100c60ce0;
*(0x28 + (r31 - 0x60)) = 0x1043258a0;
*((r31 - 0x60) + 0x28) = self;
[*(self + r21) mas_makeConstraints:(r31 - 0x60) + 0x8];
objc_unsafeClaimAutoreleasedReturnValue();
return;
}
创建TableView没有特别的地方
-[DDHomeMixContentView numberOfSectionsInTableView:]
long long -[DDHomeMixContentView numberOfSectionsInTableView:](void * self, void * _cmd, void * arg2) {
*(r31 + 0x0) = r30;
r0 = [self mainModel];
r0 = [r0 retain];
r19 = r0;
r0 = [r0 sectionModelsArr];
r0 = [r0 retain];
r21 = [r0 count];
[r0 release];
[r19 release];
r0 = r21;
return r0;
}
numberOfSectionsInTableView 也没有特别的地方
-[DDHomeMixContentView tableView:numberOfRowsInSection:]
long long -[DDHomeMixContentView tableView:numberOfRowsInSection:](void * self, void * _cmd, void * arg2, long long arg3) {
*(r31 + 0xffffffffffffffd0) = r22;
*(0xffffffffffffffe0 + r31) = r21;
r31 = r31 + 0xffffffffffffffd0;
*(r31 + 0x10) = r20;
*(0x20 + r31) = r19;
*(r31 + 0x20) = r29;
*(0x30 + r31) = r30;
r0 = [self mainModel];
r0 = [r0 retain];
r20 = r0;
r0 = [r0 sectionModelsArr];
r0 = [r0 retain];
r21 = r0;
r0 = [r0 safeObjectAtIndex:arg3];
r29 = r31 + 0x20;
r19 = [r0 retain];
[r21 release];
[r20 release];
if ((r19 != 0x0) && ([r19 isKindOfClass:[DDHomeMixBaseSectionModel class]] != 0x0)) {
r0 = [r19 cellModelsArr];
r0 = [r0 retain];
r20 = [r0 count];
[r0 release];
}
else {
r20 = zero_extend_64(0x0);
}
[r19 release];
r0 = r20;
return r0;
}
double -[DDHomeMixContentView tableView:heightForRowAtIndexPath:](void * self, void * _cmd, void * arg2, void * arg3) {
*(r31 + 0x0) = r30;
r19 = [arg3 retain];
r0 = [self mainModel];
r0 = [r0 retain];
r21 = [[r0 sectionModelsArr] retain];
[r19 section];
r23 = [objc_msgSend(r21, @selector(safeObjectAtIndex:)) retain];
[r21 release];
[r0 release];
r20 = [[r23 cellModelsArr] retain];
r21 = [r19 row];
[r19 release];
r19 = [[r20 safeObjectAtIndex:r21] retain];
[r20 release];
[r19 cellViewHeight];
[r19 release];
r0 = [r23 release];
return r0;
}
看看model里面有啥
#import "NSObject.h"
@class DDHomeMixContentView, DDHomeMixShareStates, DDHomeTopBarBtnsModel, DDMixGateService, NSArray, NSIndexPath, NSString;
@interface DDHomeMixMainModel : NSObject
{
_Bool _isVCAppearInScreen;
_Bool _scrollRecommendToTop;
_Bool _hasLoadRecommandData;
_Bool _hasRecommandData;
_Bool _hasTabView;
_Bool _isNewRecommend;
_Bool _isLoading;
NSString *_pageIdForData;
NSString *_generalPara;
DDHomeMixContentView *_mixContentView;
NSArray *_sectionModelsArr;
DDHomeTopBarBtnsModel *_top_btns;
DDHomeMixShareStates *_shareStatesStore;
NSIndexPath *_recommendIndexPath;
double _recommendCriticalPointY;
DDMixGateService *_assembleService;
}
- (void).cxx_destruct;
- (void)analyParaWithLinkUrl:(id)arg1;
@property(retain, nonatomic) DDMixGateService *assembleService; // @synthesize assembleService=_assembleService;
- (void)configInit;
- (void)dataDidLoad:(id)arg1;
@property(retain, nonatomic) NSString *generalPara; // @synthesize generalPara=_generalPara;
@property(nonatomic) _Bool hasLoadRecommandData; // @synthesize hasLoadRecommandData=_hasLoadRecommandData;
@property(nonatomic) _Bool hasRecommandData; // @synthesize hasRecommandData=_hasRecommandData;
@property(nonatomic) _Bool hasTabView; // @synthesize hasTabView=_hasTabView;
- (id)init;
- (id)initWithLinkUrl:(id)arg1;
@property(nonatomic) _Bool isLoading; // @synthesize isLoading=_isLoading;
@property(nonatomic) _Bool isNewRecommend; // @synthesize isNewRecommend=_isNewRecommend;
@property(nonatomic) _Bool isVCAppearInScreen; // @synthesize isVCAppearInScreen=_isVCAppearInScreen;
- (void)loadData;
@property(nonatomic) __weak DDHomeMixContentView *mixContentView; // @synthesize mixContentView=_mixContentView;
- (void)outerForceChangeWithLinkUrl:(id)arg1;
@property(retain, nonatomic) NSString *pageIdForData; // @synthesize pageIdForData=_pageIdForData;
@property(nonatomic) double recommendCriticalPointY; // @synthesize recommendCriticalPointY=_recommendCriticalPointY;
@property(retain, nonatomic) NSIndexPath *recommendIndexPath; // @synthesize recommendIndexPath=_recommendIndexPath;
- (void)refreshData;
- (void)removeFirstFloor;
@property(nonatomic) _Bool scrollRecommendToTop; // @synthesize scrollRecommendToTop=_scrollRecommendToTop;
@property(retain, nonatomic) NSArray *sectionModelsArr; // @synthesize sectionModelsArr=_sectionModelsArr;
@property(retain, nonatomic) DDHomeTopBarBtnsModel *top_btns; // @synthesize top_btns=_top_btns;
@property(readonly, nonatomic) DDHomeMixShareStates *shareStatesStore; // @synthesize shareStatesStore=_shareStatesStore;
- (void)updateTableView:(_Bool)arg1;
- (void)updateTableView:(_Bool)arg1 anchor:(id)arg2;
@end
这个model和平时的不太一样😂
NSArray *_sectionModelsArr;这个重要
void * -[DDHomeMixContentView tableView:cellForRowAtIndexPath:]这个很重要
void * -[DDHomeMixContentView tableView:cellForRowAtIndexPath:](void * self, void * _cmd, void * arg2, void * arg3) {
r31 = r31 - 0x90;
*(r31 + 0x20) = d9;
*(0x30 + r31) = d8;
*(r31 + 0x30) = r28;
*(0x40 + r31) = r27;
*(r31 + 0x40) = r26;
*(0x50 + r31) = r25;
*(r31 + 0x50) = r24;
*(0x60 + r31) = r23;
*(r31 + 0x60) = r22;
*(0x70 + r31) = r21;
*(r31 + 0x70) = r20;
*(0x80 + r31) = r19;
*(r31 + 0x80) = r29;
*(0x90 + r31) = r30;
r22 = self;
r26 = [arg2 retain];
r20 = [arg3 retain];
r0 = [r22 mainModel];
r0 = [r0 retain];
r24 = [[r0 sectionModelsArr] retain];
[r20 section];
r21 = [objc_msgSend(r24, @selector(safeObjectAtIndex:)) retain];
[r24 release];
[r0 release];
r24 = [[r21 cellModelsArr] retain];
r0 = [r24 safeObjectAtIndex:[r20 row]];
r29 = r31 + 0x80;
r23 = [r0 retain];
[r24 release];
[r23 setIndexPath:r20];
if ([r21 canLoadData] == 0x0) {
if ([r23 canLoadData] == 0x0) {
*r31 = r21;
if (r23 != 0x0) {
r24 = [[r23 cellViewIdentifier] retain];
r0 = [r23 cellViewClassName];
r29 = r29;
r25 = [r0 retain];
[r23 cellViewHeight];
v8 = v0;
}
else {
r25 = @"DDHomeMixBaseCellView";
r24 = r25;
}
}
else {
[r23 startLoadData];
*r31 = r21;
if (r23 == 0x0) {
r25 = @"DDHomeMixBaseCellView";
r24 = r25;
}
else {
r24 = [[r23 cellViewIdentifier] retain];
r0 = [r23 cellViewClassName];
r29 = r29;
r25 = [r0 retain];
[r23 cellViewHeight];
v8 = v0;
}
}
}
else {
[r21 startLoadData];
if ([r23 canLoadData] != 0x0) {
[r23 startLoadData];
*r31 = r21;
if (r23 == 0x0) {
r25 = @"DDHomeMixBaseCellView";
r24 = r25;
}
else {
r24 = [[r23 cellViewIdentifier] retain];
r0 = [r23 cellViewClassName];
r29 = r29;
r25 = [r0 retain];
[r23 cellViewHeight];
v8 = v0;
}
}
else {
*r31 = r21;
if (r23 != 0x0) {
r24 = [[r23 cellViewIdentifier] retain];
r0 = [r23 cellViewClassName];
r29 = r29;
r25 = [r0 retain];
[r23 cellViewHeight];
v8 = v0;
}
else {
r25 = @"DDHomeMixBaseCellView";
r24 = r25;
}
}
}
*(r31 + 0x18) = r26;
r0 = [r26 dequeueReusableCellWithIdentifier:r24];
r29 = r29;
r0 = [r0 retain];
r26 = r0;
*(r31 + 0x8) = r24;
*(0x18 + r31) = r25;
if (r0 != 0x0) {
r24 = @selector(listenerThread);
r25 = 0x1050e3000;
}
else {
r27 = [[UITableViewCell alloc] initWithStyle:zero_extend_64(0x0) reuseIdentifier:r24];
[r26 release];
[r27 setSelectionStyle:zero_extend_64(0x0)];
r26 = [[UIColor clearColor] retain];
[r27 setBackgroundColor:r26];
[r26 release];
NSClassFromString(r25);
objc_alloc();
r24 = @selector(listenerThread);
r0 = [UIScreen mainScreen];
r0 = [r0 retain];
r25 = 0x1050e3000;
[r0 bounds];
r19 = [[r23 viewConfig] retain];
r26 = [r26 initWithFrame:r19 viewConfig:r3];
[r19 release];
[r28 release];
r0 = [r27 contentView];
r29 = r29;
r0 = [r0 retain];
[r0 addSubview:r26];
[r0 release];
[r26 setDelegate:r22];
r1 = @selector(setTag:);
r0 = r26;
asm { movk w2, #0xc08, lsl #16 };
objc_msgSend(r0, r1);
[r26 release];
r26 = r27;
}
r0 = [r26 contentView];
r29 = r29;
r0 = [r0 retain];
r19 = r0;
r1 = @selector(viewWithTag:);
asm { movk w2, #0xc08, lsl #16 };
r27 = [objc_msgSend(r0, r1) retain];
[r19 release];
r0 = [r22 contentCell];
r29 = r29;
r0 = [r0 retain];
[r0 release];
if ((r0 == 0x0) && ([r27 isKindOfClass:[DDHomeMixRecommendCollectionCellView class]] != 0x0)) {
[r22 setContentCell:r27];
}
r0 = [r22 recommentContentCell];
r29 = r29;
r0 = [r0 retain];
[r0 release];
if ((r0 == 0x0) && ([r27 isKindOfClass:[DDHomeMixRecommendContentCellView class]] != 0x0)) {
[r22 setRecommentContentCell:r27];
}
[r23 setCellView:r27];
r0 = [*(r24 + 0x530) mainScreen];
r0 = [r0 retain];
objc_msgSend(r0, *(r25 + 0xde0));
[r27 setFrame:r27];
[r19 release];
[r27 updateView:r23 indexPath:r20];
[r27 release];
[r23 release];
[*r31 release];
[*(r31 + 0x10) release];
[*(r31 + 0x8) release];
[r20 release];
[*(r31 + 0x18) release];
r0 = [r26 autorelease];
return r0;
}
//DDHomeMixContentView
sectionModelsArr 里面都是DDHomeMixBaseSectionModel
然后里面再是_cellModelsArr DDHomeMixBaseCellModel
DDHomeMixBaseCellModel的属性有
//
// Generated by class-dump 3.5 (64 bit).
//
// class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2013 by Steve Nygard.
//
#import "NSObject.h"
@class DDHomeMixBaseCellConfigModel, DDHomeMixBaseCellView, DDHomeMixBaseSectionModel, DDHomeMixCellViewConfig, NSArray, NSDate, NSIndexPath, NSString;
@interface DDHomeMixBaseCellModel : NSObject
{
_Bool _isViewDisplaying;
_Bool _needShowBury;
_Bool _oncomingRefreshNeedShowBury;
_Bool _isLoading;
_Bool _hasLoaded;
_Bool _needListemRemoveList;
unsigned long long _cornerType;
NSString *_cellViewClassName;
NSString *_cellViewIdentifier;
double _cellViewHeight;
DDHomeMixCellViewConfig *_viewConfig;
DDHomeMixBaseCellView *_cellView;
DDHomeMixBaseSectionModel *_sectionModel;
NSIndexPath *_indexPath;
NSString *_page_id;
NSDate *_date;
NSString *_map_id;
NSString *_component_name;
DDHomeMixBaseCellConfigModel *_configModel;
NSArray *_valuesArr;
NSArray *_miaoZhenUrls;
}
- (void).cxx_destruct;
- (void)assembleCellInfo:(id)arg1;
- (void)assembleValueInfo:(id)arg1;
- (_Bool)canLoadData;
@property(nonatomic) __weak DDHomeMixBaseCellView *cellView; // @synthesize cellView=_cellView;
@property(retain, nonatomic) NSString *cellViewClassName; // @synthesize cellViewClassName=_cellViewClassName;
@property(nonatomic) double cellViewHeight; // @synthesize cellViewHeight=_cellViewHeight;
@property(retain, nonatomic) NSString *cellViewIdentifier; // @synthesize cellViewIdentifier=_cellViewIdentifier;
@property(retain, nonatomic) NSString *component_name; // @synthesize component_name=_component_name;
- (void)configInitData;
@property(retain, nonatomic) DDHomeMixBaseCellConfigModel *configModel; // @synthesize configModel=_configModel;
- (void)configViewHeight;
@property(nonatomic) unsigned long long cornerType; // @synthesize cornerType=_cornerType;
- (void)dataDidLoad:(id)arg1;
@property(retain, nonatomic) NSDate *date; // @synthesize date=_date;
@property(nonatomic) _Bool hasLoaded; // @synthesize hasLoaded=_hasLoaded;
@property(retain, nonatomic) NSIndexPath *indexPath; // @synthesize indexPath=_indexPath;
- (id)init;
- (id)initWithComSign:(id)arg1 info:(id)arg2;
@property(nonatomic) _Bool isLoading; // @synthesize isLoading=_isLoading;
@property(nonatomic) _Bool isViewDisplaying; // @synthesize isViewDisplaying=_isViewDisplaying;
@property(retain, nonatomic) NSString *map_id; // @synthesize map_id=_map_id;
@property(retain, nonatomic) NSArray *miaoZhenUrls; // @synthesize miaoZhenUrls=_miaoZhenUrls;
@property(nonatomic) _Bool needListemRemoveList; // @synthesize needListemRemoveList=_needListemRemoveList;
@property(nonatomic) _Bool needShowBury; // @synthesize needShowBury=_needShowBury;
@property(nonatomic) _Bool oncomingRefreshNeedShowBury; // @synthesize oncomingRefreshNeedShowBury=_oncomingRefreshNeedShowBury;
@property(copy, nonatomic) NSString *page_id; // @synthesize page_id=_page_id;
- (Class)pitModelClass;
- (void)removedFromList;
@property(nonatomic) __weak DDHomeMixBaseSectionModel *sectionModel; // @synthesize sectionModel=_sectionModel;
@property(retain, nonatomic) NSArray *valuesArr; // @synthesize valuesArr=_valuesArr;
@property(retain, nonatomic) DDHomeMixCellViewConfig *viewConfig; // @synthesize viewConfig=_viewConfig;
- (void)startLoadData;
- (void)updateCellViewAndBuryWhenDataDidLoad;
@end
重点看其中的cellView。 cell的类名,高度,identifi,indexpath。
有一个canLoadData的判断 这里用0吧
cell创建了则取出cellViewIdentifier,cellViewClassName,cellViewHeight
没有则赋值字符串“DDHomeMixBaseCellView”
然后调用系统的复用机制 r0 = [r26 dequeueReusableCellWithIdentifier:r24];
cell为空则创建 UITableViewCell 把上面的类名创建cellview (我以前也这么写的,既可以当view也可以做cell)加到cell上显示
不同的cell再更新view [r27 updateView:r23 indexPath:r20];
再看看cellview的创建 更新
void * -[DDLuckyActivityListBannerCell initWithStyle:reuseIdentifier:](void * self, void * _cmd, long long arg2, void * arg3) {
r31 = r31 - 0x170;
*(r31 + 0x100) = d9;
*(0x110 + r31) = d8;
*(r31 + 0x110) = r28;
*(0x120 + r31) = r27;
*(r31 + 0x120) = r26;
*(0x130 + r31) = r25;
*(r31 + 0x130) = r24;
*(0x140 + r31) = r23;
*(r31 + 0x140) = r22;
*(0x150 + r31) = r21;
*(r31 + 0x150) = r20;
*(0x160 + r31) = r19;
*(r31 + 0x160) = r29;
*(0x170 + r31) = r30;
r29 = r31 + 0x160;
*(r29 + 0xffffffffffffff80) = self;
*(0xffffffffffffff90 + r29) = __objc_class_DDLuckyActivityListBannerCell_class;
r0 = [[r29 - 0x80 super] initWithStyle:arg2 reuseIdentifier:arg3];
r19 = r0;
if (r0 != 0x0) {
r0 = objc_alloc();
r0 = [r0 init];
r21 = sign_extend_64(*(int32_t *)ivar_offset(_bannerImageView));
*(r19 + r21) = r0;
[*(r19 + r21) release];
r0 = [r19 contentView];
r0 = [r0 retain];
[r0 addSubview:*(r19 + r21)];
[r20 release];
*(r29 + 0xffffffffffffff58) = __NSConcreteStackBlock;
*(r29 + 0xffffffffffffff60) = *0x10399d020;
*(r29 + 0xffffffffffffff68) = 0x100060a98;
*(0xffffffffffffff78 + r29) = 0x1043258a0;
r0 = [r19 retain];
*(r29 + 0xffffffffffffff78) = r0;
objc_msgSend(*(r19 + r21), @selector(mas_makeConstraints:));
objc_unsafeClaimAutoreleasedReturnValue();
r21 = [objc_alloc() init];
r26 = [[UIFont systemFontOfSize:r29 - 0xa8] retain];
[r21 setFont:r26];
[r26 release];
[r21 setTextAlignment:zero_extend_64(0x2)];
r26 = [[UIColor whiteColor] retain];
[r21 setTextColor:r26];
[r26 release];
[r21 setText:0x1043f7eb8];
r0 = [r22 contentView];
r0 = [r0 retain];
[r0 addSubview:r21];
[r26 release];
r0 = objc_alloc();
r0 = [r0 init];
r23 = r0;
[r0 addTarget:r22 action:@selector(switchClick:) forControlEvents:stack[2048]];
r0 = [r22 contentView];
r0 = [r0 retain];
[r0 addSubview:r23];
[r24 release];
objc_storeStrong((int64_t *)&r22->_switchView, r23);
r24 = @selector(colorWithRed:green:blue:alpha:);
r25 = [objc_msgSend(@class(UIColor), r24) retain];
[r23 setTintColor:r25];
[r25 release];
r0 = objc_msgSend(@class(UIColor), r24);
r29 = r29;
r25 = [r0 retain];
[r23 setOnTintColor:r25];
[r25 release];
r0 = @class(UIColor);
asm { movk x8, #0x3fd1, lsl #48 };
r24 = [objc_msgSend(r0, r24) retain];
r2 = r24;
[r23 setBackgroundColor:r2];
[r24 release];
[r23 frame];
r0 = [r23 layer];
r0 = [r0 retain];
[r0 setCornerRadius:r2];
[r0 release];
r1 = @selector(setClipsToBounds:);
r0 = objc_msgSend(r23, r1);
asm { movk x8, #0x3fe6, lsl #48 };
CGAffineTransformMakeScale(r0, r1);
*(r31 + 0x50) = *(r31 + 0x88);
*(0x60 + r31) = *(r31 + 0x98);
*(int128_t *)(r31 + 0x70) = *(int128_t *)(r31 + 0xa8);
[r23 setTransform:r31 + 0x50];
*(r31 + 0x28) = __NSConcreteStackBlock;
*(r31 + 0x30) = d9;
*(r31 + 0x38) = 0x100060c68;
*(0x48 + r31) = r27;
*(r31 + 0x48) = [r22 retain];
objc_msgSend(r23, r20);
objc_unsafeClaimAutoreleasedReturnValue();
*r31 = __NSConcreteStackBlock;
*(r31 + 0x8) = d9;
*(r31 + 0x10) = 0x100060e38;
*(0x20 + r31) = r27;
*(r31 + 0x20) = r23;
[r23 retain];
objc_msgSend(r21, r20);
objc_unsafeClaimAutoreleasedReturnValue();
[*(r31 + 0x20) release];
[*(r31 + 0x48) release];
[r22 release];
[r21 release];
[*(r29 + 0xffffffffffffff78) release];
}
r0 = r19;
return r0;
}
void -[DDLuckyActivityListBannerCell updateView:indexPath:](void * self, void * _cmd, void * arg2, void * arg3) {
r31 = r31 - 0x50;
*(r31 + 0x10) = r24;
*(0x20 + r31) = r23;
*(r31 + 0x20) = r22;
*(0x30 + r31) = r21;
*(r31 + 0x30) = r20;
*(0x40 + r31) = r19;
*(r31 + 0x40) = r29;
*(0x50 + r31) = r30;
r29 = r31 + 0x40;
r19 = self;
r21 = [arg2 retain];
r22 = [arg3 retain];
r20 = [r21 retain];
[r20 isKindOfClass:[DDLuckyActivityListBannerModel class]];
r21 = r20;
if (!CPU_FLAGS & NE) {
[r20 release];
r21 = zero_extend_64(0x0);
}
r0 = [r19 cellModel];
r0 = [r0 retain];
[r0 setViewForUpdate:zero_extend_64(0x0)];
[r23 release];
*r31 = r19;
*(r31 + 0x10) = __objc_class_DDLuckyActivityListBannerCell_class;
[[r31 super] updateView:r21 indexPath:r22];
[r22 release];
[r21 setViewForUpdate:r19];
r23 = [[r21 banner] retain];
r24 = [[UIImage imageNamed:@"luckyActivity_banner.png"] retain];
[r19->_bannerImageView sdSetImageWithURLStr:r23 placeholderImage:r24];
[r24 release];
[r23 release];
[r19 updateSwitchState];
[r21 release];
[r20 release];
return;
}
终于知道为什么说“cell作为model的属性”了。
因为正确的说法是“继承于uiview的cellView作为model的属性” 。
而不是继承于uitableviewcell的cell作为model的属性。