一周随笔--15.9.21

一周新知识点记录(15.9.21)

一. writeToFileatomically

- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;

第二个参数的意思是:

如果为YES则保证文件的写入原子性,就是说会先创建一个临时文件,直到文件内容写入成功再导入到目标文件里.

如果为NO,则直接写入目标文件里.


二.  NSerror

参数依次为:

1、错误域(NSString)

2、错误标识 (NSInteger)

3、错误信息 (字典)

NSError *error = [NSError errorWithDomain:@"错误域" code:400 userInfo:@{NSLocalizedDescriptionKey:@"错误信息"}];

NSLog(@"%@",error.localizedDescription);

NSLog(@"%@",error.description);

注意:error.description并不是错误信息,NSError没有description这个属性来描述错误信息,这是对error对象的描述

参考


三. ios7self.view.frame

ios7.0以后如果导航栏translucent为YES,即半透明,那么self.view的始终是以屏幕左上角为坐标(0,0)点的。

如果导航栏translucent为NO,即不透明。那么self.view在加载完毕之后,即视图控制器的viewDidLoad方法之后(注意是之后,不包括viewDidLoad),它的区域不包括导航栏部分,即以导航栏左下角点为坐标(0,0)点,高度也是屏幕高度减去了导航栏高度和状态栏高度。

特别注意在self.view加载未加载完毕,即self.view显示之前(viewWillAppear之前),它还是以屏幕左上角为坐标(0,0)点的。


四. 关于在异步函数中执行主队列中的任务

dispatch_async(dispatch_get_main_queue(), ^{

[self initBaseView];

});

代码示例如上

在主队列中添加任务,并通过异步函数执行。因为主队列中的任务只能在主线程中执行,因此不开辟新的线程,那么该任务在主线程中是串行执行的。这样的话上面代码直接替换成 [self initBaseView];有什么区别呢?

区别在于:加入viewDidLoad:方法里有3段代码,按顺序从上到下依次为A B C。其中B为[self initBaseView];

运行之后,发现3段代码的运行顺序为A,B,C,没有任何问题。但是如果将B替换成在用异步函数从主队列中执行,那么执行的顺序将会是A,C,B。

因为上面的代码是在主队列中加入了待执行的代码段B(任务B),异步函数会等待主线程中在任务B之前的任务(也就是任务B所在的viewDidLoad:函数)执行完毕才会将任务B从主队列中取出,放在主线程中执行。这就是为什么先执行A,C。再执行B的原因。因此,viewDidLoad方法执行完毕,才会去执行B。


五. 关于图形上下文创建方法的参数Scale

关于创建图形上下文的两个方法

方法一:UIGraphicsBeginImageContextWithOptions(CGSize size, BOOL opaque, CGFloat scale);

方法二:UIGraphicsBeginImageContext(CGSize size);

方法一中3个参数依次表示:

size:创建的图形上下文的尺寸大小

opaque:图形上下文是否透明 NO为不透明

scale:图像缩放比例(用于调整图像分辨率)。

在理解之前首先要知道的是,对于手机屏幕而言,我们用分辨率在衡量屏幕的清晰度。分辨率的单位是像素,以iphone6为例,分辨率为750*1336像素。而我们所说的屏幕的尺寸,对于iphone6而言则是375*668,单位是点。因此iphone6屏幕一个点包含4个像素(2*2)。这个2就对应屏幕的scale属性,可以通过[UIScreen mainScreen].scale来获取。

理解了上面内容,方法中的scale就不难理解了。这个scale是获取到的图像的缩放比例(或者说是缩放因子),它决定了获取到的图像的分辨率。简单理解,假如scale的值为2,那么获取到的图像一个点有4个像素(长宽各2个)。通常我们把scale的值设置成0,表示设置成默认的缩放比例(跟屏幕相同),对于配备了两倍retain屏的iphone4s、5、5s、6,这个缩放比例默认就是2;如果是6p,则默认是3,因此scale设置成0或设置成2对于iphone4s、5、5s、6是一样的。

对于方法二而言,并没有scale这个参数,其实它的缺省值为1,并不是0。因此用这个方法创建图形上下文得到的图像质量会比较低(除非iphone4)。图像的质量从图像的大小就能区别出来,将获取到的图像保存到沙盒,查看图像大小,轻松辨别。


六.  ios7.0截屏新方法

- (BOOL)drawViewHierarchyInRect:(CGRect)rect afterScreenUpdates:(BOOL)afterUpdates

该方法对指定UIView作用,通过将UIView的内容绘制到图形上下文上然后获取图像来达到截取UIView的效果。

作用对象:要截取的UIView对象

参数说明:

rect:图形上下文上的区域,不是UIView的区域。将UIView绘制到图形上下文rect的区域上。

afterUpdates:尚不清楚。推测设置成NO立即截取


七. 预编译输出宏定义

#ifdef DEBUG
#define DebugLog(format,…)    NSLog(@"{%s,%d}" format, __FUNCTION__,__LINE__,##__VA_ARGS__)
#else
#define DebugLog(format,…)
#endif

系统宏介绍:

__LINE__:宏在预编译时会替换成当前的行号

__FUNCTION__:宏在预编译时会替换成当前的函数名称

__VA_ARGS__:简单的说,就是将左边…的内容替换进来

##:宏连接符

参考


八. 运算符

&:按位与

|:按位或

^:按位亦或

~:取反

>>:右移

参考


九. 应用打包成ipa

1.先将运行模式设置为真机

2.Xcode上面菜单——Product——Archive

3.右击工程,在finder中打开

4.右击——显示包内容——Products——Applications 看到一个有禁止符号的文件

5.打开Itunes,将该拖进去,这样就能在Itunes的应用程序一栏找到打包好的ipa文件了。

时间: 2024-10-11 05:57:30

一周随笔--15.9.21的相关文章

寒假第六周 2.15 --- 2.21

新的一周^w^ 2.15 hdu Greedy Tino n个w[i],问能否分成相等的两堆,使得每一堆尽量大 不懂,题解说的是双塔dp dp[i][j] 表示前i个搭成两个塔,差值为 j 的,这两个塔的高度的最大和 dp[i+1][j-v] = max(dp[i+1][j-v],dp[i][j]+v) //放在较高的那个塔上 dp[i+1][j+v] = max(dp[i+1][j+v],dp[i][j]+v)//放在较矮的那个塔 dp[i+1][j] = max(dp[i+1][j],dp[

一周随笔--15.10.19

一周新知识点记录(15.10.19) 一.ipad——UIPopoverController UIPopoverController继承自NSObject,因此不具备显示能力,它是通过其中的内容控制器显示的内容的.  UIPopoverController使用四部曲: 一.创建UIPopoverController的内容控制器 二.根据内容控制器初始化UIPopoverController对象 三.设置UIPopoverController对象的尺寸 四.显示UIPopoverControlle

一周随笔--15.11.02

一周新知识点记录(15.11.02) 一.storyboard中搭建tableViewCell 在storyboard中搭建tableView,一种是以UITableViewController为容器,另一种则是以UIViewController为容器,拖出一个tableView来. 当以UITableViewController为容器时,UITableViewCell可以是动态也可以是静态的,若是静态的则控制器可以不关联文件.(具体待验证)http://m.blog.csdn.net/blog

一周随笔--15.10.27

一周新知识点记录(15.10.27) 一.不规则按钮OBShapedButton 常规按钮都是一个矩形区域,即使设置了按钮layer的cornerRadious,能响应点击事件的依旧是整个矩形区域. OBShapedButton是开源的第三方库,直接继承自UIButton,直接使用即可.它的响应区域只限定在button的图片或者背景图片区域,周围空出的区域无法响应. 二.sendActionsForControlEvents UIButton的实例方法,通过代码手动发送按钮的点击事件触发按钮的响

一周随笔--15.10.06

一周新知识点记录(15.10.06) 一.UIWindow的windowLevel (优先级) 我们在程序中获取通过[UIApplication sharedApplication].keyWindow获取到应用程序的主屏幕,其实并不一定是AppDelegate类中定义的那个window.首先了解UIWindow的一些概念: UIWindow是一种特殊的UIView,它也可以自定义,在程序中可以同时显示多个UIWindow对象(UIWindow对象通过makeKeyAndVisible方法显示出

一周随笔--15.9.28

一.阴影(NSShadow)参考 self.view.layer.shadowColor = [UIColor blackColor].CGColor; //阴影颜色 self.view.layer.shadowOffset = CGSizeMake(10, 10); //阴影偏移 四周阴影则设置为CGSizeZero self.view.layer.shadowOpacity = 1; //阴影透明度,默认为0,不显示 self.view.layer.shadowRadius = 10; //

x项目第一周随笔

第一周主要做的一个事情就是游戏客户端框架的搭建 目前大家商量的结果就是所有的逻辑都有lua脚本来实现,这样做的主要目的是为了后续更新的方便 因为如果需要重新打包的话,让玩家每次都去下一个很大的包也不太现实. lua的方案,lua调用c++的部分, 用tolua++来导出c++代码的各种数据类型.主要就是写各种pkg文件. 这一部分非常好实现. 比较麻烦的部分是,在lua中绑定一些lua的函数,比如计时器模块,schechlerScriptFun(luafunction, interval) 或者

《软件测试技术》课程第八周随笔

软件测试第八周随笔,本周软件测试的课程已全部结束,随笔重点回顾下因果图.  (一)概念: 因果图法是一种适合于描述对于多种输入条件组合的测试方法,根据输入条件的组合.约束关系和输出条件的因果关系,分析输入条件的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件涉及的各种组合情况.因果图法一般和判定表结合使用,通过映射同时发生相互影响的多个输入来确定判定条件.因果图法最终生成的就是判定表,它适合于检查程序输入条件的各种组合情况.采用因果图法能帮助我们按照一定的步骤选择一组高效的测试用例

7.15~7.21 暑期第三周进度报

经过本周刻苦学习java语言,我已经掌握了java语言的输入与输出语句格式,并且学会了java语言基本语法中的顺序结构以及选择结构(if-else 和 switch),大致了解了java语言的循环结构.我发现不同编程语言之间是有相通的地方的,这三种语法和c语言以及c++中的顺序.选择和循环相同.只是不同语言中输入和输出语句格式不一样而已. 这一周每天早上我都会观看java语言的教学视频,并且付诸实践.在网上查询了java语言常用的输入语句:使用Scanner类.使用java.io.Buffere