『看知乎』iOS 版

开源项目sheepy1 • 于 2016-01-27 17:45:55 +0800 • 最后由 sheepy12016-01-29 01:24:28 +0800 2539 阅读

用 Swift 写了个看知乎的 iOS 客户端,欢迎大家一起交流 ^ ^

Github地址

项目介绍和几个 Tips

回复: 7
  • iBcker 2016-01-27 23:04:03 +0800

    看完了,不错~

    提几个小点

    HomeCell 里建议重写prepareForReuse方法,从来cancel图片下载操作和重置图片。
    loadImageFrom 方法里面的网络请求队列是并发的,目测会出现请求返回结果错乱的情况
    loadImageFrom 的 NSCache 切换到后台会被清空,是否改用现有的图片异步下载库会更加合理一点?
    model可以尝试用struct 
    

    啦啦啦啦~~~干活去了····

  • dugege 2016-01-27 23:07:52 +0800

    建议加上pod,这个帖子里管理很棒 http://swiftcn.io/topics/35

  • sheepy1 2016-01-27 23:45:52 +0800

    @iBcker 多谢阅读哈。因为是个人项目,主要还是为了练手,所以想从头到尾都自己实现。你说的几点我可以稍微解释下: + 重置图片的操作是放在 UIImage 的扩展方法 setImageWithId 里的。 + 同时下载一组图片的时候,返回图片的顺序是随机的,如果不做处理的话,因为 Cell 的重用机制,确实会造成图片错位现象。所以我在设置图片的时候传入一个 flag(model 的 id 或者 cell 的 index),将这个 flag 赋给 Cell 的 tag,然后去取图片,当图片返回的时候,比较 flag 跟 当前显示 cell 的 tag 是否一致,只有一致的时候才设置图片。 + 我确实没有提供 cancel 操作,因为当时觉得没有太大必要,就算滑得快的时候滑过了很多图片其实并不需要立即显示它们,不过也可以先下载缓存下来,就当预加载了,反正不阻塞 UI。 + 光用 NSCache 做缓存确实不太妥,有时间再加个文件缓存,这样就是一般图片库用的内存 + 文件二级缓存了。 + 我这边的 model 用 struct 是不可以的……因为 JSON 和 model 的转换我是用 Swift 的反射 + OC Runtime 的 KVC 做的,struct 这样的值类型根本就不支持 KVC。不过我那个简陋的 JSON 解析库有时间我也得好好优化一下,或者换个思路,到时候可能就可以使用 struct 了。

    总之还是多谢提供建议哈 ^ ^

  • sheepy1 2016-01-27 23:48:23 +0800

    @dugege 我没有使用任何第三方库,觉得没必要用 pod 啊。

  • iBcker 2016-01-27 23:50:50 +0800

    @sheepy1 哈哈,我也是浏览了一下而已,因为旁边的队友催我去改bug了··啊哈哈哈哈哈···

  • hugrup 2016-01-29 01:17:29 +0800

    gif是咋录的?

  • sheepy1 2016-01-29 01:24:28 +0800

    @hugrup 用 GIFBrewery

  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,见 Emoji cheat sheet
  • @name 会链接到用户页面,并会通知他
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
Ctrl+Enter