前言


    早就盼望着这一天发布博客记录我写程序的路程!是的,是第一个写在csdn上的app制作笔记!终于完成这个程序!!虽然有bug且功能单一,作为一个练手的app做出还是很有成就感,故拿出来和同样的新手朋友们一起分享~感谢kangkangz4博主写的的客户端模型,我才有了样例去remade,去学习怎样做一个好玩的团购客户端 :)历时6天,终于基本做出了我想要的功能,也基本美化了一番~ 期间还有过通宵做的时候,不得不说,一旦去按照自己的想法去做想要做的事的时候,再苦再累也有激情!当然跳了不少的坑,但是这6天也学习了不少的东西!是的,真不少,生活作息也绝对不规律,但是当今天app成型的时候发现,一切都值了!第零篇主要是写跳过的一些坑的爬坑过程和一些思考学习点,但是做程序真正遇到的坑真的不止这些,也是当app做了一半的时候才想起来做些笔记,让我通过写app制作过程的后续中慢慢介绍。

原作 iPhone团购信息客户端
作者 kangkangz4
blog 地址:http://blog.csdn.net/kangx6/article/details/7714140

一些说明


    过程并不顺利,因为作者做的程序比较早,所用的 美团api地址也已经失效,本来想用美团新的api好像要注册什么的有些麻烦,正好看到 百度糯米的api 可以直接生成地址,于是就用了百度糯米的api。基本上是我自己重构的代码,本来写在一个文件里了,然后重新分层做接口做的欲生欲死,所以最后拆出两个接口就不打算再拆了,时间耗费的有些长,比开始就用mvc架构来写要恶心多了!好吧,进入正题。

With source code

这里提供我的程序源码:糯米团


爬坑与思考(日记)

做完程序回过头来看看……

  1. AQGridView对象的delegate设置过了(_gridView.delegate = self),并没有执行delegate实现的方法。

    Solution:没有执行[_gridView reloadView]
    
  2. 被空指针坑的不轻,编译器并不会报错,只是程序执行没有效果而已。

  3. 关于图片缓存,用了什么机制?

    My thinking: 看上去好像用了NSMutableDictionary对象来缓存数据,
    通过查看关于 IOS开发缓存 的blog发现可以用NSURLCache类来执行,
    这样看来是ASIHttpRequest框架给自动封装好了缓存机制,请求过后得到的数据相同,
    就可以直接载入dictionary了,也就实现了图片缓存。
    
  4. 是怎样根据往下滑动,数据不断加载的?比如图片的加载。

    和自带的一样, cellForItemAtIndex 这个方法的调用就会发现通过不断return cell,
    才会执行图片的加载方法的,才会不断显示图片。
    
  5. 又一个坑,把图片定义到表格上,我们知道表格是第几个,因为有这个方法带有index(indexPath),那么怎么知道表格上的图片是第几个,怎样执行相应的方法?

    好吧,果然通过stackOverFlow了解了到底为什么- (IBAction)button: 后面为什么总要跟着一个(id)sender,
    原来sender传送的,不就是button自己本身嘛!
    在程序中用英文注解的,并附上stackOverFlow原帖网址。
    
  6. 要知道封装起来多么的恶心!我是把代码写在一个文件里,然后在那拆,设置接口、真>是日了狗……不说了,锻炼去了,回来继续拆,但愿今天工程能够完工。

    用performSelector解决,具体看程序。
    这里有两个关于selector传值的答案:
    

    http://stackoverflow.com/questions/16842151/how-to-pass-parameters-using-selector

    (上一个selector传参用)和(下一个基本是程序中我遇到到问题)
    

    http://stackoverflow.com/questions/4011297/passing-parameters-to-the-method-called-by-a-nstimer

        我承认第二个答案也不是我想要的,但是看他解决的问题和错信息提示:
    

    ‘NSInvalidArgumentException’, reason: ‘* -[MapKitDisplayViewController updateBusLocation]: unrecognized selector sent to instance 0x4623600’

    这种看起来就是传值乱传了个呗,那我只要把传递的参数类型判断一下就好了,
    假如随便乱传了东西,那么方法里就直接给nil就解决了我的问题。
    
  7. 多线程调用,刚开始我模拟网络读取“南京”的api时用的是xml文档,因为本地解析文档太快所以直接写了nstimer来延迟加载,这样就有了给MBProcessorHUD加载提示框显示的时间,但是nstimer计时时占用了主线程,所以计时器在运行时就不能进行其它操作。
    所以要把NSTimer对象放到别的线程去执行~

        这真的是一个学习的过程、、现在看的我很痛苦,但还是要看下去。
    

    http://www.cnblogs.com/wwwkhd/archive/2011/09/14/2176018.html
    http://www.oschina.net/question/54100_36134

        不就创建一个timer的线程执行嘛!真的有那么简单?
    

    四、NSTimer为什么要添>加到RunLoop中才会有作用
    iOS并发编程(Concurrency Programming)系列之一:Run Loop

    所以并不是没看到main thread没有添加runloop就是没有添加,放到新线程里还是得手动添加。
    

    2015.12.13 把timer放到别的线程里的想法已经落空,或许你早就想到了,doesn’t make sense! 是的,虽然占用的是主线程,把它放到别的线程执行的意义又是什么呢?于是写了一个performSelectorOnMainThread的方法,但是好像并没有什么作用,或许我不该self引用>,不过现在已经不想折腾了,折腾了这么久线程内存都看了七里八里的了,反正也就1秒的>加载时间,随它去吧……

  8. 看到上一个runloop的操作中有autoReleasePool,就不得不把ARC联系到一起,是的,IOS用strong代替了retain,用weak代替了assign,arc机制也是自动内存回收的机制,那么手动的autoReleasePool块也就不行了,但是依然可以采用@autoreleasepool的方式延迟内存>的释放。
    http://segmentfault.com/q/1010000000520778
    复制一下别人说的:

    你写到了release/retain等方法, ARC 下你不能写这些方法,但ARC 会帮你在合适的地方>插入这些方法。这将导致内存的延迟释放。
    

    所以引出一个疑问(actually the question in my mind remaining too long, now I’m giving it an answer!):所以说为什么有了ARC还是用手动来释放内存?

    网上有人是这么说的:效率比较低。
    

    http://blog.csdn.net/h3c4lenovo/article/details/8423644
    所以具体怎么dealloc?
    http://www.cnblogs.com/kenshincui/p/3870325.html
    说到这还有一个也是脑海里存在已久的疑问,明天拿出来一块解决!--多线程对比。

  9. NSThread、NSOperation、NSOperationQueue、GCD
    http://ju.outofmemory.cn/entry/136672
    http://www.cnblogs.com/wisdom-yao/p/4226882.html

    啊,看了看简直太烦了,看来要写NSThread还要加上autoreleasepool进行释放操作,
    而且并没有用过NSOperation和NSOperationQueue方法,
    更别说GCD,这次还是使用NSThread吧,
    毕竟想今天完工!
    

    但是说起来GCD是基于C语言的框架却是苹果推荐的多线程技术。
    GCD深入理解 http://www.cocoachina.com/cms/wap.php?action=article&id=8248

  10. 关于ARC的内存管理问题,一些东西并不会自释放从而导致内存泄漏,比如NSTimer,还有一些扩展的属性怎么释放到底是怎样的还有待研究,未完待续。

糯米团—重制“iPhone团购信息客户端”(零)源代码与跳的那些坑和思考相关推荐

  1. 糯米团—重制“iPhone团购信息客户端”(一)

    前言 因为是重制的客户端,作者博客中写到的很详细的内容相同的这里不会再写,但会给出提示,对照查看. iPhone团购信息客户端的开发 目录结构 由于原作没有按照分层架构设计,所以这里我按照自己想法进行 ...

  2. 糯米团—重制“iPhone团购信息客户端”(四)

    奥对,忘了说了,Xcode7已经默认https连接了,自动锁定了http连接 Solution: 1. 在Info.plist中添加 NSAppTransportSecurity 类型 Diction ...

  3. 糯米团—重制“iPhone团购信息客户端”(三)

    一个cell和一个popover写好之后,就可以进入主视图的编辑了. FirstViewController.h #import <UIKit/UIKit.h> #import " ...

  4. 糯米团—重制“iPhone团购信息客户端”(二)

    好,接着上一篇来,BusinessLogicLayer完了之后是PresentationLayer 首先从MainCell文件夹里开始 这里面存放的是GridView的单元格的定义,最终呈现出 的样式 ...

  5. [iPhone中级] iPhone团购信息客户端的开发 (一)

    因为工作的原因,已经很久没有更新博客了,这次我们就来完成一个稍显复杂的一个团购信息客户端,主要整合了ASIHTTPREQUEST,KISSXML,AQGridView,MBProgressHUD这几个 ...

  6. [iPhone中级]iPhone团购信息客户端的开发 (二)

    接上一篇,这篇我们对我们的客户端加入KissXML,MBProgressHUD,AQridView这几个库,首先我们先加入KissXML,这是XML解析库,支持Xpath,可以方便添加更改任何节点.先 ...

  7. [iPhone中级] iPhone团购信息客户端的开发 (三)

    接上二篇的内容,今天我们就来介绍一下如何将解析出来的数据放入AQGridView中显示出来,因为我们的工程中已经将AQGridView导入了,所以我们在KKFirstViewController中直接 ...

  8. [iPhone中级] iPhone团购信息客户端的开发 (四)

    我们对团购客户端进行了重构,来看一下效果图呢 这里因为美团提供了地图坐标,所以我们也加入了MapKit来显示店铺所在位置,但只有美团有,其他几个网站都没有提供. 我们把源码放出:谢谢大家一如既往的支持 ...

  9. ios 团购信息客户端demo(一)

    团购信息客户端,主要整合了ASIHTTPREQUEST,KISSXML,AQGridView,MBProgressHUD这几个主要流行的IOS开发库,我们先来看一下效果图 首先我们新建一个IOS工程, ...

最新文章

  1. float布局设置同一行行高一样_布局思想:大事化小、先行后列、见缝插针
  2. Android高级开发专题晋升班
  3. 这两种printf()函数重定向方法,太实用了
  4. python 函数 过程_python之函数篇
  5. anaconda安装python3.7、jupyter_Anaconda3 Python 3 和 2 in Jupyter Notebook共存方法
  6. 关于 CSDN 下载频道知识产权保护的声明
  7. python画笔的尺寸_Matplotlib 常用画图命令总结:使用 Python 在论文中画出一手漂亮的数据图...
  8. java switch命令_Java switch-case语句用法
  9. iOS开发总结——项目目录结构
  10. houdini 常用
  11. 抖音AI大数据,贼棒。
  12. Halcon学习(7):颜色识别
  13. 设置TreeViewer的前景色和背景色
  14. 装饰装修类小程序开发
  15. 连着恰饭,还能有1000w播放?B站商单案例拆解
  16. 阿里云最新最全扩容方法
  17. ORA-00933: SQL命令未正确结束 解决办法
  18. 室内定位——如何在微信小程序中获取Beacon的RSSI值
  19. 计算机知识竞赛活动工作总结,知识竞赛活动工作总结
  20. 哎呦,这个社会和时代是怎么了呢???

热门文章

  1. 免费解决Android studio 3.0更新后搜狗输入法卡顿问题
  2. 前端单元测试及其工具介绍(一)
  3. flash读取xml简明实例教程
  4. RFID技术在快餐行业运营管理中的应用
  5. 美丽乡村——大堰镇万一村
  6. 计算机中丢失vcomp110.dll,进击的巨人vcomp110.dll丢失错误解决方法一览
  7. 万能LUT调色PR预设包
  8. combox选中方法 extjs_extjs 怎么获取combox下拉框中选中的值
  9. π122E31Q 超低功耗 200Mbps高速率 双通道数字隔离器兼容代替ADuM1201WURZ
  10. 河南大学计算机系导师张重生,《大河报》我国首款AI甲骨缀合产品发布,河南大学留学归国人员联谊会会员张重生教授团队主研...