OC基础
文章平均质量分 77
bestswifter
这个作者很懒,什么都没留下…
展开
-
Objective-C浮点数转化整数(向上取整、向下取整)
Objective-C拓展了C,自然很多用法是和C一致的。比如浮点数转化成整数,就有以下四种情况。 1.简单粗暴,直接转化float f = 1.5;int a;a = (int)f;NSLog("a = %d",a);输出结果是1。(int)是强制类型转化,丢弃浮点数的小数部分。2.高斯函数,向下取整float f = 1.6;int a;a = floor(f);NSLog("a原创 2015-03-29 20:24:33 · 54389 阅读 · 1 评论 -
genstrings命令与字符串本地化
之前实习的时候大概接触过字符串本地化。但是不太知道具体原理,只知道如何去使用。看完genstrings之后好像明白是怎么回事了。字符串本地化的使用如果有一个按钮,上面的文字在中文系统上显示为“点击”,在英文系统上显示为“Click”,我们可以这么做:button.text = NSLocalizedString(@"click", nil);这里的click其实相当于字典的key,然后我们维护两套字原创 2015-11-19 21:21:11 · 5401 阅读 · 0 评论 -
UIView的contentMode属性总结
UIView的contentMode属性最初知道这个属性还是以前面试的时候,面试官看到我app的一个图片有些变形,于是考了我这个问题。确实之前没有仔细思考过,一堆枚举值看上去也挺头疼,这次把它总结一下。我们知道,定义的UIView的frame大小,和它实际需要显示的内容的大小并不总是一直的。这个问题在使用UIImageView的时候格外容易发生。很有可能图片的真实大小、长宽比例和定义的frame不原创 2015-11-24 00:15:04 · 14958 阅读 · 0 评论 -
轻量化ViewController的几个小技巧
轻量化ViewControllerMVC最令人头疼的问题可能就是随着项目愈发复杂,ViewController的代码也会变得越来越冗长。阅读了objc的《Lighter View Controllers》和《Clean Table View Code》这两篇文章之后,总结了一些常用的轻量化ViewController的小技巧。分离业务重点既然要简化ViewController中的代码,那么在不改变原原创 2015-10-11 22:47:10 · 3096 阅读 · 0 评论 -
Xcode6下iOS单元测试——XCTest和GHUnit框架简介和比较
iOS单元测试(UnitTest)在iOS中进行测试可以选择XCTest和GHUnit测试两种框架。XCTest集成在Xcode中,而GHUnit则是一个著名的开源框架。所谓的单元测试,就是指把程序分割成若干个小单元,对每个小单元单独进行测试。所谓的小单元,可以是一个方法,一个UI控件,一次简单的事件等等。本文不重点讨论测试的意义,所以就选择最简单的加法函数,介绍iOS如何进行单元测试。XCTest原创 2015-08-21 01:15:25 · 3275 阅读 · 0 评论 -
彻底搞懂OC中GCD导致死锁的原因和解决方案
GCD提供了功能强大的任务和队列控制功能,相比于NSOperationQueue更加底层,因此如果不注意也会导致死锁。所谓死锁,通常指有两个线程A和B都卡住了,并等待对方完成某些操作。A不能完成是因为它在等待B完成。但B也不能完成,因为它在等待A完成。于是大家都完不成,就导致了死锁(DeadLock)。有一定GCD使用经验的新手通常认为,死锁是很高端的操作系统层面的问题,离我很远,一般不会遇上。其实原创 2015-08-27 23:56:26 · 19670 阅读 · 6 评论 -
dismissViewController实现多个模态视图跳转
最近实现的一个需求需要用到模态视图,所以少不了与dismissViewController方法打交道。本文主要讲一讲在使用dismissViewController方法过程中遇到的那些坑。由于业务逻辑比较特殊,程序中需要在A试图控制器中present B试图控制器的视图,B视图控制器需要present C视图控制器中的视图。最后从C直接返回A。dismissViewControllerAnimate原创 2015-07-14 22:50:29 · 11970 阅读 · 3 评论 -
你真的理解__block修饰符的原理么?
开篇自测在本文的开头,提出两个简单的问题,如果你不能从根本上弄懂这两个问题,那么希望你阅读完本文后能有所收获。为什么block中不能修改普通变量的值?__block的作用就是让变量的值在block中可以修改么?如果有的读者认为,问题太简单了,而且你的答案是:因为编译器会有警告,各种教程也都说了不能修改。应该是的吧。那么我也建议你,抽出宝贵的几分钟时间阅读完本文吧。在开始揭开__block原创 2015-07-27 19:26:24 · 22209 阅读 · 4 评论 -
__weak与__block修饰符到底有什么区别
API Reference对__block变量修饰符有如下几处解释://A powerful feature of blocks is that they can modify variables in the same lexical scope. You signal that a block can modify a variable using the __block storage t原创 2015-05-04 09:47:09 · 10439 阅读 · 0 评论 -
ARC下查看对象的引用计数
网上各种文章、问答给出的结论都是“ARC下无法打印对象的引用计数值”。确实,ARC禁止直接查看Objective-C对象的引用计数,但是Objective-C对象不是还可以转化为Core Foundation对象么?于是动手做了一个小实验:id obj = [[NSObject alloc]init];printf("retain count = %ld\n",CFGetRetainCount((原创 2015-06-28 13:23:55 · 14472 阅读 · 3 评论 -
IOS中使用Quartz 2D绘制虚线
Quartz 2D是一个非常实用的二维图形绘制引擎, Quartz 2D绘图的核心API是CGContextRef,该API专门用于绘制各种图形,我们可以使用Quartz 2D API来绘制虚线。 使用Quartz 2D绘图的关键步骤有两步:获取CGContextRef;调用CGContextRef的方法进行绘图。 1.自定义UIView时获取CGContextRef IOS的绘图操作是在UI原创 2015-03-07 19:53:23 · 2205 阅读 · 0 评论 -
IOS viewDidLoad方法被执行两次(viewDidLoad和loadView方法详解)
为了搞清楚viewDidLoad、loadView等方法的用途和调用顺序,写了一个小demo,不料viewDidLoad方法被执行了两次,模拟器也一直是黑屏。查看了这两个方法的官方解释后找到了错误原因和解决方法。首先来看UIViewController.h文件中对viewDidLoad方法的解释:- (void)viewDidLoad; // Called after the view has b原创 2015-05-03 14:17:00 · 6117 阅读 · 0 评论 -
小谈NSCalendar中的报错
- (NSDateComponents *)components:(NSCalendarUnit)unitFlags fromDate:(NSDate *)date这个方法基本上都用过,获取当前NSDate对象之后,从中提取出NSDateComponents类型的某个元素。但是最近升级IOS8之后发现密密麻麻几十个报错,基本上都是在说'NSMonthCalendarUnit' is d原创 2015-01-31 20:36:06 · 4665 阅读 · 0 评论 -
IOS策略模式与多态
策略模式是一种常见的软件设计模式,这里简单得介绍一下策略模式并用IOS简单实现一下。原创 2015-04-25 00:30:46 · 3002 阅读 · 0 评论 -
NSScanner: nil string argument报错调试方案
感觉更新到xcode6.2之后(不知道是不是错觉),xcode经常莫名其妙报错NSScanner: nil string argument这个错误不会给出错误定位,所以给调试带来了一定的困难。 首先,顾名思义,错误原因是我们在调用某个方法的时候,传入了一个空字符串(注意区别于字符串内容为空)作为方法参数。但是经过多次实际研究,报错原因包括但不仅限于上述原因。调试的时候,尽量一次不要改太多代码,然后原创 2015-03-23 00:04:28 · 7987 阅读 · 0 评论 -
NSDate转换NSString时间误差
今天尝试把一个NSDate类型的对象转换成NSString时,遇到两个小麻烦。记录下来和大家分享。 最初的代码如下://错误版本1.0NSDateFormatter *formatter = [[NSDateFormatter alloc]init];[formatter setDateStyle:NSDateFormatterShortStyle];[formatter setTimeSt原创 2015-03-28 00:10:16 · 2643 阅读 · 0 评论 -
UIView生命周期详解
序言本文将简要讨论一下几个问题:loadView、viewDidLoad、viewDidAppear、initWithNibName、awakeFromNib等经常出现在UIViewController中的方法介绍。这些方法分别用来作哪些工作,换言之,创建自定义的View时代码放到以上哪个方法中。一个UIView的生命周期是怎样的。以上几个方法的调用顺序如何。通过IB和代码加载视图,有什么区原创 2015-11-27 13:40:10 · 5201 阅读 · 1 评论