澳门威利斯人_威利斯人娱乐「手机版」

来自 威利斯人娱乐 2020-04-01 23:09 的文章
当前位置: 澳门威利斯人 > 威利斯人娱乐 > 正文

未来展望,开发问题笔记

从品类1七月1日立项,到搬迁成功,上线到AppStore四月十三日,整整贰个半月。此中碰到了有的主题材料。

下边主要讲讲云信集成中遇到的坑。也算是为本团队贡献的技术文档。#1.云信SDK 推送不稳定问题。 在项目开始之初,每天早晨都可以收到推送,一到中午过后,便收不到推送,经过一系列的包括 推送证书下载,生成,替换都无济于事。 过了半个月后,基本稳定,不再出现推送收不到或者延时的问题。相信云信在推送这方面做了一定的优化。 #2.建群隐性bug.如果不是怀疑加猜测,相信很难找到问题的所在。 - (NSArray *)ignoreTeamNotificationTypes; //需要忽略的群通知类型 假设在集成之初,我需要忽略很多类型,那么需要在SDK 初始化时候设置忽略类型。 类似如下: /* * 群通知内容*/ @interface NIMTeamNotificationContent : NIMNotificationContent /** * 操作发起者ID */ @property (nullable,nonatomic,copy,readonly) NSString *sourceID; /** * 操作类型 */ @property (nonatomic,assign,readonly) NIMTeamOperationType operationType; 我们可以看到群操作类型中,有以下几种枚举。 /** 群操作类 */ typedef NS_ENUM(NSInteger, NIMTeamOperationType){ /** * 邀请成员 */ NIMTeamOperationTypeInvite = 0, /** * 移除成员 */ NIMTeamOperationTypeKick = 1, /** * 离开群 */ NIMTeamOperationTypeLeave = 2, /** * 更新群信息 */ NIMTeamOperationTypeUpdate = 3, /** * 解散群 */ NIMTeamOperationTypeDismiss = 4, } [[NSUserDefaults standardUserDefaults] setObject:@"1,2" forKey:@"ignore_team_types"];[[NSUserDefaults standardUserDefaults] synchronize];假设此时我设置忽略类型包涵 NIMTeamOperationTypeInvite 邀请成员,那么你会发现建群无论如何是不会成功的。因为没有消息生成在当前成功的session中,本地数据库也无法保存这个群。#3.替换云信自定义导航控制器的pop,push 动画。 解决了客户在使用语音过程中,不小心拇指触碰到屏幕,导致的自动返回上一层级问题。#4:删除所有云信IM 底层使用runtime 方式添加的导航头视图和头文字。 这点需要尤其吐槽一下,作为一个商用项目,使用runtime方式集成在框架中,对于设计感十足,特异性很强的App设计团队而言,十分不友好。反馈过很多次,但似乎好像没有愿意修改的意向,鉴于我们的UI设计基本很多个界面都不是统一的,这种统一的做法,其实相反并不利于提高我们团队的开发效率。 #5:开发中,无法在同一个对象中获取他们本身含有,却未暴露给我们的属性列表或者方法,或者本可以在界面传值或者显示名称的时候,却无法在同一个对象中添加属性,达到一个对象即包涵我需要的讯息的功能。 最初的解决方案是: 新建一个对象,使该对象持有信息SDK中的对象,在此基础上添加传递需要的属性。便于统一管理,方便赋值。 最终决定使用Object-C这门动态语言的特性,使用runtime获取所有可读写或者只读,只暴露在.m中,未公开的属性。这也为最终开发聊天功能中的收藏节约了时间成本。 #6:云信添加好友,中会出现重复添加好友的问题。鉴于我们需求团队采用的逻辑是: 当前用户收到添加好友请求,在会话列表中需要置顶一栏会话,专门提示用户处理此时此刻的用户请求。那么此时需要处理一下两个问题: 1:经过查看请求好友属于系统通知消息,而且对于相同用户多次添加当前用户,产生的SystemNotificaiton不相同。那么只有在根源上杜绝用户多次添加当前用户的可能。 2:这些系统消息展示在会话列表中,要计算在当前tabBarItem 显示的消息个数,当前通知消息必然也要归于其中。刷新和计算角标不可避免。 如何解决这两个问题,并且达到少出bug的情况呢,需要好好分析一下。云信IM的系统消息

图片 1显示屏快照二〇一五-10-24 23.39.43.png

IM系统新闻类型有以下两种:

 /** * 系统通知类型 */ typedef NS_ENUM(NSInteger, NIMSystemNotificationType){ /** * 申请入群 */ NIMSystemNotificationTypeTeamApply = 0, /** * 拒绝入群 */ NIMSystemNotificationTypeTeamApplyReject = 1, /** * 邀请入群 */ NIMSystemNotificationTypeTeamInvite = 2, /** * 拒绝入群邀请 */ NIMSystemNotificationTypeTeamIviteReject = 3, /** * 添加好友 */ NIMSystemNotificationTypeFriendAdd = 5, };鉴于我们App采用的是不能申请入群等业务逻辑,我们采用了,只过滤添加好友系统通知的系统消息。对于同一个用户请求添加我为好友,采用本地数据库存储,一旦请求添加过我为好友。 再次请求添加为好友,如果我没有同意或者拒绝,将不能再次添加为好友,我们会弹出您的请求正在处理,请勿重复添加!如果已经是好友,又将我删除好友,采用了微信的做法,即不必通过验证请求,即是好友。当用户接收到对方已经添加您为好友的请求之后,将该条消息置为已读。当用户选择拒绝添加好友或者同意的时候也将消息置为已读。这样逻辑上便不会又问题。当用户置空系统通知列表时,对于未处理的好友请求,采用全部置为拒绝添加为好友的处理方式。当对方收到拒绝添加好友的请求时,需要删除本地数据库,否则用户无法再次尝试去添加我为好友。#7: 消息收藏功能的实现。 采用云信SDK获取sessionid messageid然后转化为对应的自定义消息等。

图片 2显示屏快速照相二零一五-10-25 00.13.53.png图片 3显示屏快速照相二零一六-10-25 00.08.04.png图片 4C3B1E04BDD3B5C6BD38F524EAB035714.jpg

内部的所有信息,都是根据sessionid 和 messageid 获取整个消息的所有信息。然后展示,大大减少了工作量,起到了复用云信功能的作用。当然,UI永远都是最廉价的,所以就没有复用云信的,况且结构也不一样,强行gank是很容易出问题的。

先看一下开始时期获得这几个类型的时候的底蕴模块是什么的。

图片 5荧屏快速照相二〇一五-10-25 00.23.23.png

前不久就拿多个最简便的连串详细的情况分界面分析,一个App的代码是怎样被破坏殆尽的。

图片 6psb.jpeg

那样一个分界面代码量到达了860行。300行依然越来越少的意况下就能够完毕了。那么,看见到底做了怎么让一切调节器如此肥壮不堪。

功效如下:

图片 7psb-2.jpeg

  • 因而总计: cellForRow中100行,网络诉求+ 数据容错性非空判别管理+ 转化为Model 450行。代理方法 200行。
  • 我们可以见见,要想精简代码,须要在cell赋值和拍卖多少上下武术。那么怎么管理啊?管理格局如下:

图片 8显示器快速照相二〇一六-10-25 00.57.32.png图片 9荧屏快速照相二零一五-10-25 00.57.10.png

简洁之后将近400行,不仅是代码少了,更要紧的是 调和清晰,开采组织的职员看出如此的代码会相当的慢乐。整洁,有系统。统一数据管理,统一赋值。

最后在六神无主的7个月的急需迭代中,改成了如下的格局:

图片 10显示屏快照2014-10-25 00.16.48.png图片 11荧屏快速照相二〇一四-10-25 00.17.00.png图片 12显示屏快照贰零壹肆-10-25 00.17.22.png图片 13荧屏快照二零一四-10-25 00.17.22.png图片 14显示器快速照相二零一四-10-25 00.18.02.png图片 15荧屏快速照相二零一五-10-25 00.19.06.png

其余为了抓实编写翻译速度,将多数以前就动用在工程的预编写翻译宏都剔除,重新行使常量字符串代替。

图片 16荧屏快速照相2014-10-25 01.08.44.png

交替之后的效率体现:

图片 17显示器快速照相二零一六-10-25 01.09.12.png图片 18荧屏快速照相贰零壹陆-10-25 01.09.38.png

初期,像那样的宏定义多达1000四个,每一回更改贰个宏,都亟待再次编写翻译十分短日子。最终不或者忍受这种情景的直接不断下去,伊始带头了第三方库的轻便,宏定义的删除,文件财富文件的去除等一层层的操作。早前的参预编写翻译文件为1300三个,近年来出席编写翻译个数位980多个。代码的编写翻译速度确实提高了。此外App的体积也装有回落。

其余全部Images.xcassets 文件进行了联合整合治理。各样模块的图样放在各类模块之下,便于搜索,删除,替换。节省开荒开销,裁减因为图片管理不善,引致App体量增大难题。

图片 19显示屏快照二〇一五-10-25 01.16.57.png

黑马开掘存叁个首字母竟然未有大写。

  • 1:全数在awakeFromNib中开展的layer 圆角,阴影渲染,通过self.imageView.height也许width获取的惊人进行的效果渲染都将无法实现效果与利益,同期会现身三个标题,整个列表都将被一层相通藏稻草黄的遮罩所掩没,仅当滚动视图的时候,列表中展现的cell才不会被隐瞒。

缘由:iOS 10 之后,cell的加载都使用了懒加载的措施。在最先领头化的时候是无可奈何赢得长度宽度的。

  • 2: 在中间2.0.3本子中,在适配iOS10中,发掘五个标题,整个加载出来的视图竟然都力不胜任点击。大家的App选用了就好像八个TabBarItem的设计艺术,由于在iOS10上frame的乘除是有偏移的,招致整个分界面都敬谢不敏点击。失去与客户交互作用的活性。

消除方案:为了及时上线,选拔了万能的减轻方案,layoutSubViews.消逝了该难题。强制重新总计中度和宽窄,到达缓和该难点。

  • 3:复杂分界面包车型客车重构:对于复杂分界面,动辄须要1500行的代码,是必得开展代码重构的。相仿下列的详细情况构造:

图片 20显示屏快速照相二零一六-10-25 01.35.23.png

  • 1: 最上边还大概有二个横向滚动的视图未有截取,能够杜撰,这一个分界面包车型大巴每最终的多个都以不明确的。何况中度也是不显著的。都以内需依赖数据去动态总结的。相同的时间还只怕有扩充和缩放作用,还包罗部分按键也不曾显得出来,上拉展现下叁个连串等等总的来说,复杂度是异常高的。
  • 2: 这时才用tableView 去做,显明是不客观的。大家要求做过多cell的判别和冲天的论断。还或者有cell个数的论断。最后招致代码冗长,且逻辑不清。不便于以往加多四个新的必要和删除叁个须要。那么最棒的主意就是用XIB 快捷搭建。然后正是多少判别,呈现UI的主题材料了。有意思味的能够下载下来看看现实复杂程度。
  • 3: 各样View的惊人都依附于当中View的惊人,必要动态总结。提倡团队开拓应用XIB,速度应该比纯代码速度快。并且有句话说得好,越少的代码,越少的bug。其实有着的指标,独有一个,整洁的目标是: 标准,好保卫安全。

图片 21荧屏快速照相二〇一五-10-25 01.51.50.png

  • 1:比方一下客商定位音信,须求得到客户日前地理地方,然后转向金星坐标,归为NIMSDK 高德能够分辨的中纬度坐标。单独写了叁个管理类来统一管理所有定位难点。

  • 2:相信大家对接受标签这种控件真的是再熟谙但是了。假令你的工程中有随地到五处都在选用这几个,那么真的很有需求展开组件化管理。经过组件化管理。大致正是微微复杂的成效,也得以调节在300行以内。

    图片 22Snip20161025_1.png

图片 23Snip20161025_4.png

上面突显一下意义:

图片 24E0BED3B83C98B3ABD2D68F3104EA0BD6.jpg图片 25FF8C146C6E136A0BB70EBFEBC6652BC8.jpg图片 261C69B10930D57BE12EA18DF88843052F.jpg图片 2788DEE9243B95E47FD89552968EBCA36C.jpg

  • 1:那八个月实际写的东西也非常少,首要归因于太忙,要么便是太累,不想去写这几个事物。趁着开采缓冲阶段,捋一下现年那7个月自个儿都干了哪些。要构思的东西其实照旧广大的,有备无患,想外人所不考虑,做外人之不想做。业务和本领是不分家的,本领屌炸天,看的非常多,结合不到现实的业务逻辑,也是白瞎,或许强行结合,也是可怜。要明了什么才是最合适的。

  • 2:逼逼叨叨了这么多,回顾一下,刚进去这家集团,达成的对象也基本达到了。包罗代码风格,整洁度,布局是不是创制啊,都有了很通晓的前行。能够把七个体系,从差到优切实地工作的做下去,不逼逼,作者觉着那才是叁个程序猿真正的的市场股票总值。

除此以外附上全部的git commit 记录:

图片 28显示屏快速照相2015-10-25 03.08.09.png图片 29荧屏快速照相二零一六-10-25 03.08.18.png图片 30显示屏快照二〇一五-10-25 03.08.25.png图片 31显示屏快照二〇一五-10-25 03.08.37.png图片 32荧屏快速照相二零一五-10-25 03.08.45.png图片 33荧屏快速照相二〇一四-10-25 03.08.54.png图片 34荧屏快速照相二零一五-10-25 03.09.02.png图片 35荧屏快速照相二〇一四-10-25 03.09.10.png图片 36荧屏快速照相2014-10-25 03.09.18.png图片 37显示器快照二零一四-10-25 03.09.29.png图片 38显示屏快照二零一四-10-25 03.09.44.png图片 39显示屏快速照相贰零壹陆-10-25 03.09.58.png图片 40荧屏快照二〇一四-10-25 03.10.13.png图片 41荧屏快速照相2015-10-25 03.10.47.png图片 42显示器快速照相2015-10-25 03.10.55.png图片 43显示屏快照2014-10-25 03.11.27.png

30.本身的页面的广告页展现难题

标题叙述:在自己的脚下页面,点击登陆突显尾部广告页,点击退出开关平常隐敝广告页;切换底部分栏按键,再点击跳到自家的页面,当时在报到状态退出登陆,能够平常退出,但是广告页还在

缘由分析:还在的广告页其实是上一遍初步化创制的,当前的广告页视图已经蒙蔽了,所以点击还在的广告页的享用回调方法不响应(只在登入景况有State of Qatar;那是因为第4回创设时指针指向还在的要命广告页,第三回创立就照准当前的那么些广告页,当退出登陆掩瞒了,内部存款和储蓄器释放了最近的广告页,不过还在的可怜广告页未有自由所以还在,最本质的来由是创即刻不以前在非的景况(也等于没一时才成立卡塔尔国创造(又在viewWillAppear里成立State of Qatar,所以每趟一直叠加。所以创设控件的时候,最棒都在非的情事下去创建。_bottomShareImgView是广告页
if (!_bottomShareImgView) {
。。。。。。
}

上边是错误的动静的截图:

图片 44

29.浅谈webView的JS一种用法.(去掉web展现页的广告卡塔尔国

http://www.jianshu.com/p/c3204ed25b68

  • 成功方客App IM闲聊效用迁移,新增加投资者简约分界面,重写网络层,数据层,模型层。

  • 集结代码风格,集成tagret逐步收拾整个工程的代码结商谈互连网层设计和数码缓存。

  • App节食,减弱App全部容积,差非常少5M左右。

  • 轮换云信提供的UI框架,使用runtime获取云信不暴光给大家的靶子的性质列表,不必采用世袭只怕具备的法门强大属性字段,踩了云信SDK一些坑,后面一一汇报。

  • 消除了iOS10修正后的适配难题和局地刚荣升后开垦人士都直面的奇葩难点。

  • 倡导分界面复用,防止推延时间在根基的UI搭建工作上,特别注意于事情逻辑。

  • 对此团体管理有了更深的领会,以致团体手艺沉淀,发挥集体人士主观能动性,甚至一些支出中何奇之有难题的追究和总计。

23.类方法运用

用类方法创设初阶化(封装顺风车的订单视图,做判别分别布局卡塔尔;写法如下

  (instancetype)initWithFrame:(CGRect)rect IsSimple:(BOOL)isSimple {

    UToTripOrderView *tripVC = [[UToTripOrderView alloc] initWithFrame:rect];
    tripVC.isSimple = isSimple;

    if (isSimple == NO) {

        [tripVC creatUI];
        [tripVC layoutSubviewsOne];
    } else if (isSimple == YES) {

        [tripVC creatUI];
        [tripVC layoutSubviewsTwo];
    }
    return tripVC;
}

2.copy与@property

1.NSString、NSAttributedString、NSArray、NSDictionary、block:用copy
2.(字符串、数组..)带NSMutable:用strong
http://blog.csdn.net/Maybeyourdad/article/details/48469917

事例:NSMutableArray不能够用copy,因为copy的那一份是不可变的,即copy的这份形成NSArray,原本那份不改变。而作者辈是对copy的那份举行操作,所以本来的NSMutable的片段艺术用持续,也许操作时会奔溃

方客App 下载地址:

措施1:快捷枚举for in

图片 45

25.什么样优化代码?

列出在编码中什么编码习于旧贯有利于增高代码品质、软件质量和强壮性,收缩程序崩溃?

1.应用严谨的命名准绳(如匈牙利命名法)能够幸免不供给的类型转变错误。

2.在编码前先规划好流程图或使用伪代码,清晰化整个安排意图。

3.对本身的代码进行严谨的单元测量检验(unit testing)。
单元测量试验是指对软件中的最小可测量检验单元举行自己商酌和认证。如C语言中单元指三个函数,Java里单元指一个类,图形化的软件中得以指一个窗口或三个菜单等。同理可得,单元正是人为规定的一丁点儿的被测功效模块。单元测验是在软件开拓进度中要开展的最低端别的测验活动,软件的独门单元就要与程序的任何一些相隔绝的景况下开展测验。

4.格外的拍卖
第一不要轻巧使用拾壹分的捕获,其次要尽量捕获具体的不行。对于丰硕的拍卖最棒能够使用封装的艺术,我们集结接受。那样能够保障丰裕管理的一致性也能够保障当卓殊现身时品质的安居。

  • 利用内省的点子检查形式的输入
    5.采纳增量式的编制程序方式。
    利用增量式编制程序和测验,会支持于创建更加小的方法和更具内聚性的类。你应有常常评估代码品质,并有的时候的开展过多小调节,而不是一遍订刚好多事物。在写了几行代码之后,就活该张开三次创设/测验。在未有获得报告时,你不用走的太远。
    6.运用工具(如Instrument)来援救检查内存泄漏、过早释放内部存储器、CPU使用成效等难题。
    7.撤销全部的编写翻译警示,警示正是错误。
    8.写防备性的代码,使用内省的措施行检查查传入的参数。

22.成立控件初叶化

创设控件的时候最佳都要if(!控件)在这里其间成立,加上这一个论断,不然轻巧并发难题,每一遍都去创制;比方在一键求助与失物寻找按键的标题重复难题(从一定分界面那个地方跳转过来卡塔尔国

租车开始时间:
       if (!_startTimeCell) {

        _startTimeCell = [[SXMDefultCell alloc] init];
        _startTimeCell.appearUnderline = YES;
        _startTimeCell.lineToleftSpace = YES;
        _startTimeCell.lintTorightSpace = YES;
        _startTimeCell.selectionStyle = UITableViewCellSelectionStyleNone;
        _startTimeCell.mainLabel.text = @"起租时间";
        _startTimeCell.isShowAllow = YES;
        }//把下面的if包含进来会出问题,数据无法显示,考虑一下为什么?
        if (self.rentCarInfo.leaveTime) {

            _startTimeCell.subLabel.text = [SXTool dateString8WithDate:self.rentCarInfo.leaveTime];
        }else{

            _startTimeCell.subLabel.text = @"请选择起租时间";
        }

        if (StrSame(_startTimeCell.subLabel.text, @"请选择起租时间")) {

            _startTimeCell.subLabel.textColor = [SXTool grayColor];
        } else {

            _startTimeCell.subLabel.textColor = [SXTool blackColor];
        }
     [_startTimeCell layoutView];
     return _startTimeCell;

19.内部存储器溢出和内存走漏?

  • 内部存款和储蓄器溢出: 即out of memory,是指程序在申请内部存款和储蓄器时,未有丰硕的内部存款和储蓄器空间供其应用,现身out of memory;约等于你供给分配的内部存款和储蓄器超出了系统能给您的,系统不能够满足供给,于是产生溢出。比方申请了七个integer,但给它存了long本领存下的数,那就是内部存款和储蓄器溢出。memory leak会最终会促成out of memory!譬如: 一个盘子用尽各样法子只可以装4个果子,你装了5个,结果掉倒地上无法吃了,这正是溢出。例如说栈,栈满时再做进栈必定发生空间溢出,叫上溢,栈空时再做退栈也时有产生空间溢出,称为下溢。就是分配的内部存款和储蓄器不足以放下数据项系列,称为内部存款和储蓄器溢出.

  • 内部存款和储蓄器走漏:即 memory leak,是指程序在申请内部存款和储蓄器后,无法自由已报名的内部存储器空间,一回内部存储器走漏危机可以忽视,但内部存款和储蓄器走漏聚积后果很严重,无论多少内部存款和储蓄器,迟早会被占光。它是指你向系统报名分配内部存款和储蓄器进行应用(new卡塔尔国,然则使用完精晓后却不偿还(delete卡塔尔,结果你申请到的那块内部存款和储蓄器你自己也不能够再拜候(可能你把它的地点给弄丢了),而系统也无法再一次将它分配给急需的顺序。从客户使用程序的角度来看,内部存款和储蓄器泄漏本身不会产生什么样损害,作为平常的顾客,根本感到不到内部存储器泄漏的留存。真正有损伤的是内部存储器泄漏的集合,那会最终消耗尽系统具有的内部存款和储蓄器。

检查测验内部存款和储蓄器败露使用工具如图

图片 46

QQ图片20160505155210.jpg

工具的现实运用方式待进一步计算中......

19.施用sourceTree管理代码时

1.联合出错,回滚代码,找到归总以前的分层,然后回滚

图片 47

显示屏快速照相 2017-09-06 晚上4.48.04.png

2.版本已封,不过又改新东西,则足以在对应分支上新建三个拨出出来改成,新建如图

图片 48

显示器快照 2017-09-06 傍晚10.38.53.png

3.冲突时,假若整个由一个地点转移引起的则足以

Replace first file with Third : 用第三替换第三个文本
Replace...with...是用前边的交替掉后面包车型大巴

图片 49

荧屏快速照相 2017-07-26 早上9.32.55.png

3.工程加多icon到Images.xcassets

图片 50

荧屏快速照相 2018-01-03 清晨5.34.51.png

1.将切好的图标2X 3X一同入选拖进去就ok了
2.先将2X拖进去,然后再把3X拖到右上面Universal的3x标识的职分,注意不要拖到早先2X(侧边Logo库的地点卡塔尔,会以为是两张差异等的图,会不平时

图片 51

荧屏快速照相 2018-01-03 上午11.07.45.png

图片 52

显示器快速照相 2018-01-03 早晨11.09.38.png

31.类方法 和实例(对象)方法-的区别?

  • 类方式 :类就足以调用,不供给初阶化创立多少个对象

  • 实例(对象卡塔尔国方法 -:必需初始化成立对象进行调用

区别:

1.类艺术被节制在类范围内,无法被类的实例调用(即退出实例运转),alloc正是一体系措施;实例方法限制在指标实例的节制内(即实例化此前不能够运作),init便是一种实例方法,被alloc方法再次回到的对象实例调用

2.实例方法是—类伊始是- 实例方法是用实例对象访谈,类情势的靶子是类而不是实例,常常创建对象大概工具类。在实例方法里,依照三番两遍原理发送音信给self和super其实都以发送给self在类措施里面self是其它的类的类措施,在类形式中给self发送新闻只好发类方法self是类super也是哪些时候用类方法,要创造多少个实例时候得到二个分享实例,只怕得到有关类的有的共有音讯

标题汇报:

内需的时候才创设弹框视图,无需的决不成立,就可在包装的视图里面加多叁个类方式开展决断哪些时候供给创设视图,外界调节器调用就OK

2.在自定义的cell上增多开关
  • 方法一:block
    在卷入的cell上

图片 53

显示器快速照相 2018-01-31 凌晨3.24.05.png

图片 54

显示屏快速照相 2018-01-31 中午3.24.52.png

调用block:

图片 55

荧屏快速照相 2018-01-31 深夜3.25.17.png

备注:写法二之类:

图片 56

荧屏快速照相 2018-01-31 早上3.38.34.png

图片 57

荧屏快速照相 2018-01-31 凌晨3.38.56.png

图片 58

荧屏快照 2018-01-31 凌晨3.39.42.png

图片 59

显示器快速照相 2018-01-31 早晨3.41.22.png

  • 方法二:代理、打tag
    http://blog.csdn.net/m372897500/article/details/45099029

5.“OBJC_CLASS$_UToPassenger” refernced from

难题消除方法:http://blog.csdn.net/azhou_hui/article/details/18312047

30.简历

图片 60

简历元素.png

1.word pdf
2.你做了哪些?你如何做的?(显示进程)结果怎样?
3.sdk iphone ipad ios app ui c objective-c html5 swift 宗旨 代码编写 真机测验 上线 代码框架 商店类 即时报导 蓝牙( Bluetooth® 卡塔尔(قطر‎迭代(关于版本更新方面的剧情) 极光推送 环信 移出手提式有线电话机 移动端应用 api

13.保存当前支行的种类

描述:在SourceTree中项目有八个支行,一时想查看从前老分支(老版本卡塔尔国的代码,此时将要切换分支,比价麻烦,方便的做法正是保留每一种分支的档案的次序工程,要用要比对代码时展开就ok了,怎么着保存当前支行的工程呢?

解决:展开SourceTree,右上方有个在Finder中显示,点击就可以展开该支行下项目标所在地方,然后复制该项目,到别的相放的地点粘贴就能够保存成功。

图片 61

显示器快速照相 2017-09-01 早上11.06.20.png

20.拿走项目根路线,并在其下开创三个名字为userData的目录?

// 获取根路径
NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:];
// 创建文件系统管理器
NSFileManager *fileManager = [[NSFileManager alloc] init];
// 判断userData目录是否存在
if(![fileManager fileExistsAtPath:[NSString stringWithFormat:@"%@/userData", documentsDirectory]]) {
// 不存在,创建一个userData目录
[fileManager createDirectoryAtPath:[NSString stringWithFormat:@"%@/userData", documentsDirectory]withIntermediateDirectories:false attributes:nil error:nil];}

7.数组排序难题

品种难题场景:

乘车联系人页面,要是是小孩票入口选票时,联系人按再次来到的品种排列,小孩子票排最前边,别的排后边。child:0为常年
、1为孺子、2为少年

效果图:

图片 62

显示屏快速照相 2017-12-13 中午5.35.37.png

1.weakSelf与strongSelf的使用

#define WEAKSELF __weak typeof(self) weakSelf = self;

#define STRONGSELF __strong typeof(weakSelf) strongSelf = weakSelf;

在block中为了防止循环援引,常常会用weakSelf弱引用来代替self;但是借使急需频频使用(抢先一次)weakSelf就改成用strongSelf,注意运用strongSelf时还要写上WEAKSELF与STRONGSELF,因为strongSelf在weakSelf根底上包裹。相关链接:

例子:

图片 63

显示屏快速照相 2017-12-26 早晨10.25.08.png

17.网络数量乞请注意

报错奔溃等主题材料得以从以下举办死灭:

1.反省接口地址是不是精确,不经常后台马虎,最前方少了一个/,平日都有;如错误:utoo/order/emptyorder/time/slot 多叁个/平日不影响,少了分外
注意:神跡接口写成例子情势:/utoo/order/startsitelist?mode=SHARE&destSiteId=二零零三1 应该取问号前边部分,前边是比方带的参数,注意不要犯这种最少错误

2.检查参数是不是精确:
1.款式是还是不是科学:是或不是是用字典(多参数日常都以如此卡塔尔国、model.supplyPath、词典是还是不是须要转成SBJSON情势
2.参数名字是或不是填对,与后台给的均等
3.传的参数未有赋值,为空以致程序奔溃

3.服务器是还是不是将接口计划到位
若是未有,就能够有错。前边两条措施的接纳前提是服务器已经将接口铺排到位

先反省传参数了否?参数等写的花样不错?开垦意况的IP地址是不是与服务器一致?服务器的接口是或不是退换只怕写错了?

Http状态码:
200:乞请成功
300:服务器根据央浼可举办八种操作。服务器可依赖央浼者 来选用一项操作,或提供操作列表供其选取。 如300威逼操作
400:央浼错误,由于语法格式有误,服务器不可能知道此恳请
401:平常代表须要登陆照旧登陆失利
403: 服务器拒绝诉求(禁绝)
404:找不到 Web 服务器找不到你所央求的文件或脚本,请检查URubiconL 以有限支撑路线准确;也等于后台的接口难点(也会有相当的大或者接口做好了但从不安顿上来卡塔尔国
405:不容许此格局对于诉求所标志的财富,不一样意使用央浼行中所内定的不二等秘书技。请确认保证为所须求的能源设置了精确的 MIME 类型
500:服务器的中间错误。Web 服务器不能执行此恳请。请稍后重试此号令
依靠后台再次来到的数目来规定建立模型型;然后深入深入分析数据填充UI

12.身份ID的*处理

对身份ID号码实行加*号管理,居民身份证编号根本有15、17、18两种

图片 64

荧屏快速照相 2018-01-19 晚上2.30.57.png

方法3:block排序(系统方法)

图片 65

显示屏快速照相 2017-12-14 清晨3.55.56.png

瞩目:NSArray的排序方法是生成叁个排好序的新数组。NSMutableArray的排序可以间接对该数组开展排序sortUsingComparator:,也能够生成新数组sortedArrayUsingComparator: ,而原数组不改变。
sortedArrayUsingComparator那一个点子自个儿正是按依次增加的方法排序

sortUsingComparator
例子1:

图片 66

显示器快速照相 2017-12-14 早晨3.58.01.png

图片 67

显示器快速照相 2017-12-13 深夜5.02.27.png

图片 68

显示器快照 2017-12-13 凌晨4.46.22.png

例子2:

图片 69

显示器快速照相 2017-12-14 早上3.41.41.png

sortedArrayUsingComparator

图片 70

荧屏快速照相 2017-12-14 上午2.51.35.png

5.动态cell的封装

必要:高校直通车的车票列表(雷同于做公共交通车,有途经点卡塔尔国,根据实际选拔的内外车来动态体现;假若有路过地就浮现路径,未有就不呈现,上上任地点间布局区别,上面有展位就显得,未有就不出示。思路是:通过模型来调控,封装在cell中去管理,外部调控器调用就好

图片 71

荧屏快速照相 2018-01-19 凌晨4.38.36.png

1.在包装的cell中,更新构造及赋值的地点开展推断管理,如下:

图片 72

荧屏快速照相 2018-01-20 中午3.01.08.png

图片 73

显示器快速照相 2018-01-20 上午3.01.59.png

图片 74

显示屏快速照相 2018-01-20 清晨3.03.43.png

self.campusBusTicketModel.isViaPlace == YES表示有经过地方,然后再度结构:

图片 75

显示器快速照相 2018-01-20 清晨3.04.35.png

透过模型里的provider是或不是有值来判别有无展位,没有就暗藏相应的控件:

图片 76

显示器快速照相 2018-01-20 凌晨3.05.37.png

把上述的翻新方法放在重写模型方法里,那样外边更新数据时就相应处理:

图片 77

显示屏快速照相 2018-01-20 早晨3.06.03.png

模型及涉嫌如下:

图片 78

荧屏快速照相 2018-01-20 清晨3.07.03.png

图片 79

显示屏快速照相 2018-01-20 晚上3.07.20.png

图片 80

显示器快照 2018-01-20 清晨3.07.45.png

控制器中数量伏乞 cell数据映射 cell高度调整分别如下图:

图片 81

显示屏快速照相 2018-01-20 早晨3.10.23.png

图片 82

荧屏快速照相 2018-01-20 早上3.11.26.png

图片 83

显示器快速照相 2018-01-20 清晨2.47.45.png

10.模子的使用

难题:直通车供给:“服务提供方provider”这么些Label没一时则将其隐藏掉,有则显得;在cell调控中度处推断就能够,可是怎么着造成对应的种种cell呢?(用模子对应)如下:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

    UToCampusBusTicketsModel *model = _searchResultDataSource[indexPath.section];
    return model.provider.length?176:133;
}

9.jason格式与表单form方式

假如后台的接口管理的是jason格式的话要求丰裕:contentType = @"application/json";
jsonBody = YES; 要是是表单方式的话就无需加,普通的默许不写

图片 84

荧屏快照 2018-01-16 深夜7.44.27.png

图片 85

显示屏快速照相 2018-01-31 午夜2.30.34.png

25.定义系统宏

图片 86

显示器快速照相 2017-09-26 中午11.57.10.png

11.字符串相等的坑

isEqualToString 和 == 的界别,前边是不错的字符串相比相等方法,如:if([strA isEqualToString:strB]卡塔尔(قطر‎;后边的等号对诸如:if ( strA == strB卡塔尔(قطر‎,那一个strA, strB 是指针, 即使字符串的从头到尾的经过是均等的, 但指向字符串的指针肯定是区别的,所以也不能够同一啊。(为了更加好地精通字符串,供给澄清楚指针的定义,内部存款和储蓄器的抽成。 )

图片 87

荧屏快照 2018-01-18 中午5.23.43.png

图片 88

显示屏快速照相 2018-01-18 深夜5.24.28.png

图片 89

显示器快速照相 2018-01-18 清晨5.15.12.png

图片 90

显示器快速照相 2018-01-18 早晨5.15.00.png

本文由澳门威利斯人发布于威利斯人娱乐,转载请注明出处:未来展望,开发问题笔记

关键词: 澳门威利斯人 ios开发笔记 工作总结 上半年 未来