ios之app初级设计架构

1、创建新的项目,让空app跑起来

  • storyboard-纯代码
  • 常用pod文件
    ->AFNetworking->Masonry->MBProgressHUD->Reachability->MJRefresh->SDWebImage->Masonry->DZNEmptyDataSet等
  • 主体结构:侧滑、UITabBarControlle

2、项目目录的设计

  • Vender
    ->第三方资源 FMDB
  • Core
    ->Prch.h
    ->.h文件(宏定义)
  • Utils(tools)
    ->Networking(扩展)
    ->UIView+Frame(类别)
  • UI
    -> Main(MVC)
    -> Login+Register
    -> BaseUI (UIViewControllerl扩展)
    -> Feature(引导页)

3、类别(Category)添加自定义属性、扩展(Extension)

  • 通用类扩展 自定义:共用属性、共用方法 定义宏变量
  • 对pod文件再次封装 如AFNetworking Reachability 优化代码
  • 空数据界面、实时网络监控提示、状态提示(友好界面)
  • 自定义导航栏

4、自定义控件(protocol/delegate/block/Notification)
传值回调

5、FMDB 数据本地缓存
第一界面的离线数据,友好体验

6、富文本(图文表情链接)
正则表达式获取图片 图文分离排版

7、动画 CALayer
简单动画的应用

8、javascriptcore 对webview的操作调用

9、基于第三方框架的聊天、直播
集成过 极光推送、极光IM 环信IM

10、热更新 React-Native
现在算是入门阶段,还在挖坑

ios学习之runtime

  • 看到这篇对ios-runtime的讲解,http://www.imlifengfeng.com/blog/?cat=1 质量相当高
  • 我才有意识的找到NSObject,UIResponder基础类,然后打开#include <objc/objc.h>,#include <objc/NSObjCRuntime.h>源码,然后跟着文章的讲解开始去理解这些基础类。
  • 类似的开始学习这些系统的类和方法。
  • 之前的开发中,为了使app得性能更好,也尽可能的去运用系统的方法去实现,去掉繁琐的封装。对于封装,我们要取之有道。对于github上的大部分第三方,设计的理念也不尽相同,性能也就不确定。我们不要一味的简单运用,也要抽空去试着理解去改造,当然大部分开发者也会这么做,因为这些与我们的app不可能完美契合。最后等我们考虑到后期的优化性能上的提升时,需要我们自己去封装和重构。
  • ‘YYKit’等知名的SDK的对性能处理值得我们学习,搬砖这个词请我们尽可能的减少,为了自我的提高。
  • 开源的知识讲解,案例很多。我想不出为什么还要分享自己不经验的见解,现在网上类似的答案也太多,也就没必要多余的分享。等到我足够有信心做好分享的时候我也会开源的。毕竟我的知识从开源从大家的分享中得到的!感谢!

谈谈我的学习工作之路

  • 接触ios是14年中旬,至今已有两年半的时间,最初通过培训学习基础认知,去认识程序员这个行业。刚开始听到的理解都不足,能记住的就更少了。就这样一枚菜鸟诞生了,也只能算是入门了吧。
  • 练习从仿写的微博开始,一整个流程下来对于逻辑,整体和细节的处理还是力不从心的。晕乎的知道了什么。更多的去拿来别人优秀的代码去对比理解。15年初在一家小公司实习,码仔,还是蛮喜欢的名字。接触了其他完整的项目,不断完善自己对OC语言的理解。
  • 15年中旬来北京,进入校企桥,第一份正式的工作,一个人的ios开发。对于菜鸟的我挑战还是非常大的。那半年时间常常加班到很晚,对ios的认识和成长也是最快最多的。
  • 那时候常常逛的论坛是 http://www.cocoachina.com/,基本每天必刷。那时候我还没用翻墙,那时候掘金也刚对外注册开放了吧(之前是邀请注册对内),简书也刚火起来,https://github.com/虽也常用,但没有真正用起来。那时候也刚好加入了干货大群,后来有了这个网站http://gank.io/。那时候刷各种代码demo,那时候还是个一个流程写下来自己都觉得乱七八糟的菜鸟。15年我挖了很多坑,也填了很多坑。
  • 很多第一次的尝试也是从那时候开始,那时候常常潜水认识了很多大大。那时候到现在APP已经写了六个了,一个人的ios开发是痛苦的,遇到问题很多也很难有别人的现场指导,都是从网上查原因自己去排查,感谢开源感谢别人的经验分享。然而这么久来我很少分享自己的心得,因为我觉得自己的经验和认知都不够,网上分享的那些(时效性)也要自己多次去验证。
  • 现在我依然是个菜鸟。接触的越多,自己的无知就越大。我不是计算机专业出身。数学(金融统计)学位,大学的知识也基本都忘了。我不曾买过C++的书,对基础的理解也是反复从现有代码的穿插理解和别人的案例讲解来认识。现在对于那些常用的AFNetworking,Mantle的理解还是不堪,也没用到#import <objc/runtime.h>这种系统API。不得不说OC是封装的较易理解和运用的语言。学习时间短,基于大量的开放的SDK大家可以快速的进行开发。这也是整个行业码农数量的大量涌入原因之一吧,16这一年的行情真够差的。
  • 码农(搬砖)->程序员(匠心)->工程师(前瞻) 这是我对代码行业的认识。
  • 16年这一年除了写了公司的app,还接了外包。熟练了OC语言和开发流程,清晰了代码结构,重写和优化了代码逻辑。并对swift2、3的简单尝试和运用。剩下更多的时间则用来学习react-native,这个是受群里的poberwong的影响,也是对热更新的好奇。
  • 开始了对hybird,native,webApp等的大概了解,对JavaScript的兴趣也更多些。http://www.runoob.com/菜鸟教程对基础的学习还是很好用的,顺便也得了解HTML/CSSNode等。插曲是对这些东西的文档都简单了解。好像花了一两个月时间去看相关的书籍。试着搭相关的环境,把公司的电脑整的还挺乱的,系统根目录上安装的路径还是挺乱的,以至于之后插件等版本升级造成了不小的坑。爬虫:对数据的抓取python,node的兴趣有待研究。也试过用wireshark进行数据抓取
  • rn的正式尝试,安装了SublimeTextAtomVisualStudioCodeWebStorm,编辑器的选择根据插件,还是对语言环境的不熟悉需要依赖插件然后就选择后两个顺手的。基于xcode模拟器的run-ios可以正常的测试demo,安卓版本上现在配置上还是有些问题有待解决,不过现在在ios上的尝试已经算是入门了吧。对基础控件和语法也渐渐适应阶段,也已经模仿尝试了几个demo。
  • 生活时常会有对比,这一年时常会和现实做交流,比如行业间的技术水平,亲友间工资水平,地域间的生活水平,年龄接近的近状水平等。2016年行业环境也确实很糟糕。看看前辈们的现状,面临的经济压力,我确实在犹豫,自我觉得这一年来水平提高的还是不够,会担心我随之而来的很多问题并不能很好的承担责任。 我还是单身狗。。
  • 16年底校企桥获资本融资,这是值得我们高兴地,这是总共十几个人三年来的坚持最好的奖励。
  • 17年已经开始,今年准备辞职再找。这一年可以好好研究oc系统API,可以开始SDK,可以开始RN实战项目,可以开始小程序的学习,可以学习爬虫。需要学习的依然很多!加油!

设计过的app预览图

个人项目:

基于这些,校企桥成立第三年成功A轮融资

setUpBlog

#####安装brew
执行命令

1$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

######安装wget
执行命令

$ brew install wget

######安装nvm(node.js的版本管理工具)

$ wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh

######添加如下内容到~/.zshrc 配置文件

[ -s "/Users/`users`/.nvm/nvm.sh" ] && . "/Users/`users`/.nvm/nvm.sh" # This loads nvm

######安装node.js(通过nvm安装)

$ nvm install 0.10

######安装hexo

$ npm install -g hexo

######创建hexo文件夹,并安装hexo组件

$ hexo init hexo
$ cd hexo
$ npm install

######查看本地
输⼊入如下命令后,打开浏览器,并输⼊入localhost:4000来查看

$ hexo g
$ hexo s

######登录github.com注册github账号

创建与github同名的repository

eg : github账号名位lfxfengxia,则创建lfxfengxia.github.io

######部署到github上

如下所示编辑_config.yml

deploy: 
type: github
repository: git@github.com:dorayox/dorayox.github.io.git
branch: master

输入如下命令,完成到github的部署,之后打开浏览器并输入judagxu.github.io来查看

$ hexo g
$ hexo d

######上传文件到blog

在hexo目录下,创建新文件

eg : 创建新文件test

$ hexo new test

默认创建的新文件后缀问 .md文件,存在hexo/source/_posts/目录下

使用MOU打开新建的文件并完成编辑

$ mou source/_posts/test.md

将新建的文件声称网页

$ hexo g

上传到blog

$ hexo d

登录blog查看是否上传成功

http://judahxu.github.io

有关C的问题

1. 程序源代码以C语言为例,是如何转换为可执行的代码(二进制代码或者说机器语言)?

C源代码 -> 预处理器 -> 编译器 -> 汇编器 -> 链接器 -> 转换为可执行的文件

1. C源代码经过预处理器其结果,还是C语言

2. 预处理器经过编译(句法,词义分析,代码的优化,代码生成),其结果是汇编代码

3. 汇编代码结过汇编器其结果是中间代码(.o),其本质上也是二进制代码

4. 中间文件(.o)经过链接器的链接, 最后生成可执行的文件。

2.C语言里比较灵活的一块内容是指针, 那么请谈谈你对指针的理解。

回答这个问题的思路:
1、什么是指针,指针的基本概念
2.指针的使用场景
3.结合具体的例子,来说明一个, 用指针来解决那些问题。
4.关于指针运算的问题。

3.C语言内存布局

Mou icon

1.代码区:主要是存放代码,也就是程序指令。这个区的数据是只读

2.数据区,已初始区,声明全局变量的时候,同时给出了值, 那么这个变量就会放到已初始化。未初始化区:BSS,对于这个区的变量, 默认情况下, 全部初始为0  

3.堆区:是程序员接触最多的区域。malloc函数就是从这个区来分配内存的, 这个区是从下往上扩展

4.栈区:是由系统来管理的内存区域。局部变量,函数调用也在这个区,先进后出。

5.命令参数及环境变量区

4.C语言中const 关键字的理解

a. 对于非指针变量的修饰 比int const关键字可以放到int 之前, 也可放到int之后, 如const int myInt; int const myInt;它们所表达的含义是一样的, 都是表示myInt是一个常量。 不能修改myInt的值。 我们推荐使用const int myInt;
b. 对于指针变量的声明, 有四种情况 以int * 为例
1
2
3
4
1. const int * pMyPointer
2. int const * pMyPointer
3. int * const pMyPointer;
4. const int * const pMyPointer

对于1、2两种情况, 所表达的含义是一样的, 表示指针指指向的内容不能修改。

对于第3种情况, 所表达的含义是说指针本身不能再指向其它地址

对于第4种情况, 表明指针指向的内容不能修改, 同时指针本身也没能再指向其它地址。

在继承语法中, 关于OC的方法调度机制

1、每一个对象,都有一个指针指向其类
2.当向对象发送消息, 对象准备执行方法的时候,它会先在当前对象对属的类中查找这个方法, 如果找到话就开始执行, 如果没有找到的话, 就去对象所属类的父类去查找, 如果找到就执行, 如果没有找到, 则会沿着继承链一层一层的向上去查找, 直到NSObject 类, 如果找到则执行, 如果没有找到, 则首先编译器会给出一个警告, 如果忽略了这个警告,则在运行时程序会崩溃。

在继承中, 子类对象是如何说父类声明的成员变量的?

在创建一个新类的时候, 其对象会首先从父类中继承成员变量, 然后添加自身的成员变量。

谈谈你对OC中self 和 super的理解?

1.self 首先他是一个指针。
2.当向对象发送消息, 对象去调用对应的方法的时候, 在调用方法中, 在这个方法里,隐藏传了一个指针, 这个指针就是self,这个self 代表的是调用这个方法的消息接收者。
3. 有时候, 我们需要在子类里显式的调用父的方法, 这个时候 super可以代表父类, 需要注意的是, 这个super不是指针,也不是成员变量, 而它只是编译器识别的指令, 主要就用于子类访问父类的内容。