分析手动构建复杂的Cell—(新浪为例)

Nginx架构及配置详解 概述 Nginx采用C进行编写,是俄罗斯程序员开发的一款轻量级的可构建Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器的软件, Nginx服务器是一个高性能的HTTP和反向代理web服务器,同时也可提供了IMAP/POP3/SMTP服务。nginx常用作跑静态和做负载反向代理,动态php交给apache处理,因后者比较稳定,jsp交给tomcat、resin或jboss。n...... 阅读详情

分析手动构建复杂的Cell—(新浪为例) 

cell的最终实现效果如下:

先要分析每个cell有什么东西。具体每个cell什么东西,都是一些从接口获取得到的,所以数据就对应我们的model。

在设计阶段,合理的设计非常有必要。我能想到的是,通过抽象出比较共同的东西。这一点最好和接口对应起来。请求评论的接口,返回参数和主页微博列表请求参数,有哪些共同的属性。对于微博来说,有uid,weiboid等等。所以,根据接口返回的数据,我们抽象出一个基本类型。代表model的基类。

现在我们有数据了,有一个比较好的方式,就是用严格的MVC来做。和我们抽象出的接基类,对应的就是框架(frame)基类。在frame类中,有一个model,负责提取model里面的数据然后再frame类中具体去布局。 













 

比如这里的XlBaseText其属性定义就是右图所示。几乎关于微博,还是评论微博,还是转发的接口都有这几个共同的字段。所以这就作为所有内容的基类。 


说说隐藏的get和set吧。在get中,个性化数据返回格式。比如左图的,创建日期的get方法。将获取的的json数据,根据实际需要的根式,在get中个性化处理。返回正确的格式。

其实这里完全可以抽象出一个公用的方法,就是格式化时间的方法。

1、用从json获取的日期格式,初始化NSDateFormate。

2、自定义我们需要的格式,将日期转换为字符串。

3、得到时间间隔

4、判断时间差,格式化返回字符串





其实在get中设置,在set中是实现懒加载。

有必要再说说set,如果通过代码不均。我们应该在给一个框架模型的model赋值的时候,就计算好model里面属性要显示到界面的具体位置,达到高内聚的效果。而不是一一的把数据都赋值好了之后,然后再到其他类中去完成frame。比如下面的XlBaseTextCellFrame中:定义好了model里面数据显示在界面的框架。 


那么在给model赋值的时候就应该给各各框架确定好大小。 


在这里只设置了部分控件的frame,因为还有很多个性化的需求,在主页中的cell需要显示发送园和时间,而评论的cell就不需要。所以在basetextframe中只做了相同元素的不均。如下图 

 










在来述说,结合view的时候了

mdeol已经包含了数据和frame,那么view则只需要提供相应的控件就行了

来看

 


这是对应.m 

注意添加子控件一定要在init中。因为马上就要用到子控件进行赋值。

赋值的过程还是在frame的set方法中进行,这样一旦给frame赋好了值,那么子控件就有数据和frame了。 


然后就可以优雅的赋值了。分层思想

#pragma mark 3.1、设置子控件内容

- (void)settingSubViewForContent

{

    

    // 1、设置头像

    [_avata setUser:_cellFrame.dataModel.user ofType:_cellFrame.avataType];

    

    // 2、设置昵称

    _screenName.text = _cellFrame.dataModel.user.screenName;

    if (_cellFrame.dataModel.user.mbtype == kMbTypeNone) {

        _screenName.textColor = kScreenNameColor;

    } else {

        _screenName.textColor = kMBScreenNameColor;

    }

    

    // 3 设置会员图标

    if (_cellFrame.dataModel.user.mbtype == kMbTypeNone) {

        _mbIcon.hidden = YES;

    } else {

        _mbIcon.hidden = NO;

    }

    

    // 4、设置时间

    _time.text = _cellFrame.dataModel.createdAt;

    

    // 5、设置来源

    _source.text = _cellFrame.dataModel.source;

    

    // 6、设置正文

    _text.text = _cellFrame.dataModel.text;

}


#pragma mark 3.2、设置子控件Frame

- (void)settingSubViewForFrame

{

    // 1、设置头像尺寸位置

    _avata.frame = _cellFrame.avataRect;

    

    // 2、设置昵称尺寸位置

    _screenName.frame = _cellFrame.screenNameRect;

    

    // 3、设置会员图标尺寸位置

    _mbIcon.frame = _cellFrame.mbIconRect;

    

    // 4、设置时间尺寸位置

    _time.frame = _cellFrame.timeRect;

    

    // 5、设置来源标签位置

    _source.frame = _cellFrame.sourceRect;

    

    // 6、设置正文尺寸位置

    _text.frame = _cellFrame.textRect;

}

到了这里其实大部分已经差不多了。还有一点注意的是,在获得网络请求在tableviewVC中一定要将请求的数据包装成我们的cellframe。如下


- (NSArray *)statusFrameTranslateFromStatusArray:(NSArray *)statusArray

{

    //保存获取的微博列表的数组

    NSMutableArray *statusFrameArray = [NSMutableArray array];


    for (XlStatus *status in statusArray) {

        XlHomeStatusCellFrame *statusCellFrame = [[XlHomeStatusCellFrame alloc] init];

        statusCellFrame.dataModel = status;

        [statusFrameArray addObject:statusCellFrame];

    }

    return statusFrameArray;

}


这时候tableVC中的数据原就可以设置为cellframe了。包含了数据与框架








使用Vivado Design Suite进行物理优化(二) phys_opt_design 命令是用于对设计进行物理优化。这个命令可以在布局后的后置模式(post-place mode)中运行,也就是在放置所有组件之后;还可以在完全布线后的后置模式(post-route mode)中运行,即在设计完全布线之后。 阅读详情

相关推荐

【 FPGA 】Vivado中常用的5个Tcl命令

本博文内容是学习课程做的笔记,只记录了一些,由于没有基础,且讲的也不是太清楚,只吸收了一部分内容,记录下来备忘。 目录: Objects的基本概念? 首先讲解Vivado中objects的基本概念,然后是如何使用这5个Tcl命令。   cell可以是Verilog中的实例化后的模块,也可以是一些LUT、DSP48E等资源,它们有相应的pin,pin与pin之间的连线为net,po...

Reborn Lee 1万+

React 2022生态全景:核心演进与开发实践

React作为现代前端开发的核心技术栈,其并发渲染机制通过useDeferredValue和Suspense等API实现了渲染过程的可中断与优先级调度,大幅提升了复杂应用的交互流畅度。在工程实践层面,Next.js和Remix等框架通过SSR、流式渲染等技术优化了首屏性能,而Redux Toolkit和Zustand等状态管理方案则降低了代码复杂度。2022年React生态的关键突破在于服务端组件(Server Components)的落地,使得组件级服务端渲染成为可能,配合Vite等新型构建工具,形成了覆

virusswb的专栏 395

双向晶闸管交流调压基础知识及Multisim电路仿真

本文介绍了双向晶闸管交流调压电路的工作原理及应用。该电路由双向晶闸管、RC移相电路和双向触发二极管组成,通过调节电位器改变触发角实现电压调节。当电位器阻值减小时,触发角减小,输出电压升高;阻值增大时,触发角增大,输出电压降低。Multisim仿真展示了不同电位器档位下的波形特征:0%档位时全导通,50%档位时半导通,100%档位时基本关断。该电路结构简单、调节平滑,广泛应用于调光、调速等场合,但会产生谐波干扰。

XU157303764的博客 838

FPGA 超级实用的约束技巧,当时序遇到怎么编译都不可行的时候可以考虑用下面的方法

Floorplanning 在vivado中,可以将某一个模块的代码固定在某一个范围内,可以使用Floorplanning功能。 首先完成一次编译后,选择open Implemented Design功能,选择目标模块,再选择Draw Pblock功能,可以在右侧画出你想要将其布局的地方。完成后选择保存。 注意所选择的范围区域的资源足够模块代码使用。 Fix cells 当FPGA时序约束比较困难时,某个模块的代码容易出现问题,我们可以首先针对易出现问题的模块编译出一个简易无时序...

Best_Leei的博客 1877

SAP ABAP BAPI_PRODORD_CHANGE:动态刷新PP主数据的实战解析

本文深入解析了在SAP ABAP开发中,如何利用BAPI_PRODORD_CHANGE函数实现生产订单PP主数据的动态刷新。针对CO02事务码无法满足的后台自动化场景,详细讲解了通过设置explosion_date和explode_new等关键参数来强制重新读取BOM和工艺路线的实战方法,并提供了核心代码示例与避坑指南,确保生产订单信息与最新主数据同步。

weixin_29231027的博客 149

STM32驱动2.8寸TFTLCD屏幕实战:从看懂原理图到点亮第一个像素(基于ILI9341)

本文详细介绍了如何使用STM32驱动2.8寸TFTLCD屏幕(基于ILI9341驱动芯片),从硬件连接到软件配置,包括FSMC接口设置、ILI9341初始化序列、坐标设置及基础绘图函数实现。文章还提供了常见问题排查指南和性能优化技巧,帮助开发者快速解决屏幕不亮等问题,并提升显示性能。

weixin_42665255的博客 267

VIVADO之手动布局布线

手动布线

wang__shenli的博客 3135

伪傻瓜式安装sql server2008【附带安装包】

安装各式各样的软件无疑是学习过程中…较…为烦躁的一部分 木有醋 但还是开始吧 为什么这是伪呢? 因为刚开始天真无邪的我真的是傻瓜式安装(迷之自信),结果就B了(打开配置管理器的瞬间….一片空白) BaiduCloud分享 红领巾在何方?? Link链接:https://pan.baidu.com/s/1NZCxP0Y27dBPrgHoRWLDyQ...

EuniBoom的博客 6万+

vivado如何反标,fix固化目标单元

1、device界面,ctrl+F,打开选择对话框 2、选择对应的primitive cell,比如选择DSP 3、OK确认后,在下面会列出所有的目标cell 4、右键单击,或全选右键单击,选择fix cell 5、生成后,点击保存(注意备份原有的约束文件XDC,以免被覆盖)

devdgle的博客 2517

【WorkBuddy】WorkBuddy 智能体快速上手:从零到一的实践指南

文章摘要: 传统自动化脚本难以应对灵活多变的自然语言需求,导致逻辑复杂、维护成本高。智能体(Agent)通过理解语义意图、动态决策和松耦合组件解决了这些问题。WorkBuddy采用声明式配置,通过可视化界面定义意图、实体和对话策略,无需编码即可快速构建智能体。其核心组件包括意图分类、实体提取、对话策略、故事样本和回退机制,适用于客服支持、知识问答等高频场景。通过环境准备(Python/Node.js/Redis)和简单配置,用户可以快速搭建可运行的智能体,显著提升自动化效率。

ruiqideng的博客 1631

TikTok达人私信自动化:用Node.js和纯JavaScript实现WSS协议通信(附完整代码结构)

本文详细介绍了如何使用Node.js和WSS协议实现TikTok达人私信自动化系统。通过分层架构设计、WSS连接管理、消息加密策略及频率控制,开发者可以构建稳定高效的私信工具,突破平台API限制,适用于跨境电商和社交媒体运营场景。

weixin_30352645的博客 519

Vivado工程经验与时序收敛技巧

https://blog.youkuaiyun.com/truecrab/article/details/80651655 时序问题可以从三个方面考虑 1 代码优化 1) rst 尽量少用,尽量高电平有效 2) clk 尽量同步,谨慎处理异步问题和分叉 ,扇出太大时加 globle 3)数据扇出太大时用(*max_fanout = ''xx'*)限制,或者手动复制(...

gaoxcv的博客 2302

7段数码管驱动电路设计

7段数码管驱动电路设计

好好学习,天天向上 9753

vivado实现分析与收敛技巧7-布局规划

vivado实现分析与收敛技巧7-布局规划

cckkppll的博客 1258

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

AI for Science新浪潮:单细胞测序分析的AI革命与实践指南

AI与单细胞测序的融合,已从炫酷的概念验证步入规模化应用的前夜。它不仅在推动基础科研从“假设驱动”向“数据驱动”范式变革,更在临床诊断、药物研发等产业领域展现出重塑格局的潜力。国产化工具链正在成熟、行业标准逐步完善、跨学科的“计算+生物”复合型人才不断涌现。一个由AI深度驱动、能够以前所未有的精度理解和干预生命的“智能单细胞”时代正在加速到来。对于广大开发者和研究者而言,现在正是躬身入局,在这一充满机遇的前沿交叉领域构建自身核心竞争力的黄金窗口期。配图建议。

399

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

NEAL:基于Python的跨应用桌面自动化库,解放重复性工作

桌面自动化技术旨在通过程序模拟人工操作,自动执行计算机上的重复性任务,其核心原理是调用操作系统API或应用接口来控制软件界面与数据流。这项技术的价值在于将人力从繁琐、机械的流程中解放出来,极大提升工作效率并减少人为错误。在数据处理、报告生成、系统集成等场景中,自动化脚本能串联起浏览器、办公软件等多个独立应用,实现端到端的流程自动化。本文探讨的NEAL项目,正是这样一个基于Python的统一抽象层,它封装了底层技术细节,提供了简洁直观的API。通过整合Selenium、pywin32等库,NEAL降低了跨应用

weixin_33966095的博客 418

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Vivado使用技巧(25):Block Synthesis技术

本系列第22~24篇介绍了Vivado综合技术中的各个方面,这里先概述一下:Vivado综合支持使用多种策略(Strategy)和全局设置(Setting)。在RTL或XDC文件中,可以用综合属性来改写某些设置选项。目前设计越复杂,全局设置方式限制了设计的潜在性能,同一设计中不同层次结构可能在不同设置下才能获得最佳表现。 针对此问题,一个解决方法便是Out-of-context**(OOC)模式...

FPGADesigner的博客 7230

Vivado使用技巧(29):约束功能概述

设计约束概述 设计约束就是定义编译过程中必须满足的需求,只有这样才能保证在板子上工作时功能正确。但不是全部约束在所有过程中都会使用,比如物理约束只用在布局和布线过程中。Vivado工具的综合和实现算法时时序驱动型的,因此必须创建合适的时序约束。我们必须根据应用需求选择合理的约束,过度约束或约束不足都会造成问题。 老版的ISE开发工具使用UCF(User Constraints File)文件进行约...

FPGADesigner的博客 2万+

Vivado使用技巧(13):约束功能概述

设计约束概述 设计约束就是定义编译过程中必须满足的需求,只有这样才能保证在板子上工作时功能正确;但不是全部约束在所有过程中都会使用,比如物理约束只用在布局和布线过程中;Vivado工具的综合和实现算法是时序驱动型的,因此必须创建合适的时序约束;我们必须根据应用需求选择合理的约束,过度约束或约束不足都会造成问题; 老版的ISE开发工具使用UCF(User Constraints File)文件进...

bleauchat的博客 1万+

VIVADO如何手动布局布线

手动锁定方法: implementation------sch-----fixed routing 手动布线: implementation----open ---------floorplanning -----leafcells -----mark/highlight ------move. 1,VIVADO如何手动布局布线 我现在设计了一个延时模块,应用后需...

flomingo1的专栏 1万+

验证Vivado布局布线不变

平台:vivado2018.3应用场景,在设计的过程中,一些特定的引脚,我们想在原有的基础上不改变其布局布线方式。

FPGA开发 | 高速接口与数字IC设计 3521

(电工基地笔记)Vivado固化至SPI Flash

如果从头开始做SPI Flash固化是有一些麻烦的,要在完成综合之后,打开 synthesized Design (图)   (图)     然后在synthesized Design打开状态下,选择Tools->Edit Device Properties编辑器件属性 (图)     我们这个FPGA有16MFlash,是Master SPIx1,大家有兴趣可以看一下X

Peter's Blog 1万+

fix setup hold

However, if you have a bad clock design - say one clock coming through one BUFG, and another coming through two BUFGs, then the skew will be large (several nanseconds), then the tool will likely not...

fairy0905的专栏 769

关于复杂的cell模型

​作者:李洪强 关于复杂的cell模型 第一个写数据模型,第二个,先来frame,先把frame弄好,再来一个cell,因为数据模型完了之后是存到frame模型的,存的过程中,根据数据模型里面的内容来计算子控件的宽高, 现在还没有子控件,等cell定义完了之后才有子控件 数据模型是放在frame模型里面的,放的时候是调用status方法,在setStat

hongqiang609597的博客 480
上一篇: 巨坑。OC 中引用头文件#import注意事项 “”和<>
下一篇: Undefined symbols for architecture
kingcodexl
博客等级 码龄12年 18粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值