MVVM在iOS端当当App(11.4.0版本)首页实现探索

 

先查看页面结构

点击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的属性。

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值