前言:作为初级程序员,想要提高自己的水平,其中一个有效的学习方法就是学习别人好的项目。本篇开始会陆续更新本人对github上开源的一个很不错的项目的一点点学习积累。也就是,探究着别人写的源码,我学到了新的什么东西?本人愚拙,而且码龄不多,也就三年左右,水平不高,如有挫解,还望指正。本人乐爱学习,乐于分享,广结良缘,愿意交流。当然,高手可以飘过。

Coding-iOS项目网址:https://github.com/Coding/Coding-iOS 读者感兴趣的可以自己去下载,当然项目很多第三方框架是没有直接集成进来的,读者自行通过该项目的提示处理。

另外还有官网介绍:https://coding.net/u/coding/p/Coding-iOS/git#rd

内容概要:

1、关于MobClick,友盟统计的使用

2、关于Google Analytics

3、关于Debug

4、关于RDVTabBarController

5、关于GCC语法

6、关于TMCache的使用

7、关于TTTAttributedLabel的使用

正文:

2016年3月21日

文件:BaseViewController.m

1、下面代码添加友盟统计,设置状态栏,代码设置竖屏。

 - (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// hy:友盟统计,https://github.com/liyoro/UMAnalytics
// hy:标哥的博客:http://www.henishuo.com/ios-umeng-push/
[MobClick beginLogPageView:[NSString stringWithUTF8String:object_getClassName(self)]];
// hy:设置状态栏
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES]; // hy:如果不是竖屏、不支持竖屏或是横屏
if (self.interfaceOrientation != UIInterfaceOrientationPortrait
&& !([self supportedInterfaceOrientations] & UIInterfaceOrientationMaskLandscapeLeft)) {
// hy:设置成竖屏
[self forceChangeToOrientation:UIInterfaceOrientationPortrait];
}
}
......
- (void)forceChangeToOrientation:(UIInterfaceOrientation)interfaceOrientation{
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:interfaceOrientation] forKey:@"orientation"];
}

文件:MobClick.h 是友盟统计的SDK接口文件。具体使用以后补充,先知道这个类是这么回事。

2、下面代码中用了Google Analytics。

关于集成这个Google Analytics的SDK学习的网站:https://www.raywenderlich.com/53459/google-analytics-ios (外国网站)

对应的国内翻译网站:http://www.cocoachina.com/industry/20140108/7674.html

 - (void)viewDidLoad{
[super viewDidLoad];
self.view.backgroundColor = kColorTableBG;
// hy:这里又代码设置竖屏
if (self.interfaceOrientation != UIInterfaceOrientationPortrait
&& !([self supportedInterfaceOrientations] & UIInterfaceOrientationMaskLandscapeLeft)) {
[self forceChangeToOrientation:UIInterfaceOrientationPortrait];
}
// hy:添加了google analytics,Google提供的免费的使用者分析服务
// GA
id<GAITracker> tracker = [[GAI sharedInstance] defaultTracker];
[tracker set:kGAIScreenName value:[NSString stringWithUTF8String:object_getClassName(self)]];
[tracker send:[[GAIDictionaryBuilder createScreenView] build]];
}

3、下面代码用了宏定义Debug打印模式

- (void)tabBarItemClicked{
DebugLog(@"\ntabBarItemClicked : %@", NSStringFromClass([self class]));
}

然后我command+click跳转到下面代码:

 #define DebugLog(s, ...) NSLog(@"%s(%d): %@", __FUNCTION__, __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__])

然后我就自己创建新的Simple Project使用了一下:

4、文件夹:RDVTabBarController

因为在项目源码中,RootTabViewController : RDVTabBarController<RDVTabBarControllerDelegate>,所以进一步探索RDVTabBarController,发现这个是第三方框架

而且github上点赞量蛮高的,网址是:https://github.com/robbdimitrov/RDVTabBarController 。记录以后学习学习该源码做了什么?

3月24日:

5、在CodingBannersView.m文件中可以发现一枚"GCC语法":

6、关于TMCache的使用:

在Coding-iOS这个项目中,通过pod集成了TMCache这个框架,于是我就对这个框架进行了了解:

TMCache的github地址:https://github.com/tumblr/TMCache

TMCache 是 Tumblr 公司开发的一个快速,无死锁的并行对象缓存,支持 iOS 和 OS X 系统。

示例代码:

UIImage *img = [[UIImage alloc] initWithData:data scale:[[UIScreen mainScreen] scale]];
[[PINCache sharedCache] setObject:img forKey:@"image" block:nil]; // returns immediately

[[PINCache sharedCache] objectForKey:@"image"
                              block:^(PINCache *cache, NSString *key, id object) {
                                  UIImage *image = (UIImage *)object;
                                  NSLog(@"image scale: %f", image.scale);
                              }];

不过现在已经停止更新了。

然后再来看Coding-iOS这个项目中的一个TMCacheExtend.h和TMCacheExtend.m文件。

 #import <Foundation/Foundation.h>
#import "TMCache.h" @interface TMCache (Extension) + (instancetype)TemporaryCache;
+ (instancetype)PermanentCache; @end
 #import "TMCacheExtend.h"

 #define kTemporaryCache @"com.dv.cache.temporary"
#define kPermanentCache @"com.dv.cache.permanentCache" @implementation TMCache (Extension) + (instancetype)TemporaryCache{
return [[TMCache sharedCache] initWithName:kTemporaryCache];
}
+ (instancetype)PermanentCache {
return [[TMCache sharedCache] initWithName:kPermanentCache];
} @end

看的出这个拓展(但不是类别,仅仅是普通类,使用了便利构造器的用法),便利出了两个方法:temporary(临时的)、permanent Cache(永久的缓存)

然后在CSSearchModel.m文件中,只用了临时缓存的方法TemporaryCache。

7、关于TTTAttributedLabel的使用

这个是点赞超过5K的第三方框架,github网址是:https://github.com/TTTAttributedLabel/TTTAttributedLabel ,简略的中文博客介绍可以看看:http://each.dog/2015/01/14/read-tttattributedlabel.html ,然后来看看Coding源码中UITTTAttributedLabel.h是对TTTAttributedLabel的一个继承拓展,然后多出被使用,其中CSSearchCell.h中就被使用,导入和遵循了协议,在CSSearchCell.m文件中第32行声明了属性,然后创建了这个UITTTAttributedLabel对象:

如果读者意犹未尽,可以继续阅读本人学习Coding-iOS第二篇《学习Coding-iOS开源项目日志(二)》。

学习Coding-iOS开源项目日志(一)的更多相关文章

  1. 推荐大家在GitHub 上值得关注学习的 iOS 开源项目

    GitHub上有很多不错的iOS开源项目,和大家特别推荐以下几个项目: 1. ReactiveCocoa GitHub链接:ReactiveCocoa/ReactiveCocoa GitHub自家的函 ...

  2. 学习Coding-iOS开源项目日志(二)

    继续前篇:<学习Coding-iOS开源项目日志(一)>,接着本第二篇<学习Coding-iOS开源项目日志(二)>讲解Coding-iOS开源项目. 前言:作为初级程序员,想 ...

  3. 学习Coding-iOS开源项目日志(五)

    继续,接着前面第四篇<学习Coding-iOS开源项目日志(四)>讲解Coding-iOS开源项目. 前 言:作为初级程序员,想要提高自己的水平,其中一个有效的学习方法就是学习别人好的项目 ...

  4. 学习Coding-iOS开源项目日志(三)

    继续前两篇,接着本第三篇<学习Coding-iOS开源项目日志(三)>讲解Coding-iOS开源项目. 前 言:作为初级程序员,想要提高自己的水平,其中一个有效的学习方法就是学习别人好的 ...

  5. iOS开源项目周报1222

    由OpenDigg 出品的iOS开源项目周报第二期来啦.我们的iOS开源周报集合了OpenDigg一周来新收录的优质的iOS开发方面的开源项目,方便iOS开发人员便捷的找到自己需要的项目工具等. io ...

  6. 直接拿来用!最火的iOS开源项目

    1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是G ...

  7. (转)直接拿来用!最火的iOS开源项目(二)

    “每一次的改变总意味着新的开始.”这句话用在iOS上可谓是再合适不过的了.GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7, ...

  8. GitHub上最火的40个iOS开源项目

    1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS. Mac OS X网络通信类库,现在是 ...

  9. GitHub上非常受开发者欢迎的iOS开源项目(二)

    "每一次的改变总意味着新的开始."这句话用在iOS上可谓是再合适不过的了.GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x ...

随机推荐

  1. 【转】Key/Value之王Memcached初探:一、掀起Memcached的盖头来

    一.Memcached是何方神圣? 在数据驱动的Web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载.缓存是解决这个问题的好办法.但是ASP.NET中的HttpRuntim ...

  2. 会员管理系统的设计和开发(2)-- RDLC报表的设计及动态加载

    在上篇<会员管理系统的设计和开发(1)>介绍了关于会员系统的一些总体设计思路和要点,经过一段时间开发,软件终于完成并发布.在这期间,碰到了不少技术难点,并积累了不少开发心得和经验,本篇继续 ...

  3. css3代码让页面倾斜

    教大家一个方法使用CSS把整个网页倾斜,代码只有在支持CSS3.0的浏览器上有效果.目前只有IE9以上版本及firefox高版本支持,其它浏览器没有测试.代码如下 body{ -webkit-tran ...

  4. MVC _ aspx视图引擎登录及状态保持

    MVC - M(Model模型层)   V(View视图层)   C(Control控制层) 数据访问层        界面层       业务逻辑层 WebForm 是请求访问哪一个页面,返回的是一 ...

  5. kFreeBSD有活过来的迹象?UbuntuBSD

    那些年追过的FreeBSD分支,有debian系的kFreeBSD,arch系的archBSD现在叫pacBSD,gentoo系的gentooBSD:但基本上在虚拟机环境很难成功安装http://ww ...

  6. 基于类型系统的面向对象编程语言Go

    (整理自网络) 面向对象编程 Go语言的面向对象编程(OOP)非常简洁而优雅.说它简洁,在于它没有了OOP中很多概念,比如:继承.虚函数.构造函数和析构函数.隐藏的this指针等等.说它优雅,是它的面 ...

  7. EasyUI-加载完Html内容样式渲染完成后显示

    等待页面的css样式加载完毕,Html内容加载完毕,样式生成后再进行展示,避免一开始加载内容后,逐渐渲染样式造成的不良视觉效果,增强用户体验. 新增base-loading.js文件,代码如下 //获 ...

  8. java servlet+oracle 新手可看

    最近公司领导告诉接下去接的一个产品,可能会涉及到oracle数据库,以前用得最多的是mssql,前些时间学了下mysql也算少许用过.oracle没接触过.应为我之前做过.net开发,所以数据访问接口 ...

  9. 阿里社招B2B

    岗位描述:1. 按USE CASE进行业务需求分析和软件概要设计2. 进行软件详细设计和编码实现,确保性能.质量和安全3. 维护和升级现有软件产品,快速定位并修复现有软件缺陷岗位要求:1. 精通Web ...

  10. mysql易混淆知识点

    1,join 和 union join连接属于表之间的水平操作,而union 是表之间的垂直操作.简单讲就是水平操作主要是为了获得列数据,垂直操作是为了获得行数据 cross  join        ...