iOS特性修饰符(strong、weak...)
iOS特性在修饰的时候我们经常会和下面几个修饰符打交道
strong、retain、assign、unsafe_unretained、weak、nonatomic、atomic、copy
其中与内存有关的有strong、retain、assign、unsafe_unretained、weak,在使用过程中稍有不慎就会陷入内存泄露,搞清楚他们的作用很有必要
在描述之前我们需要补充说明一些概念
//修饰变量我们用__strong形式的修饰符
__strong id a = nil;
__unsafe_unretained id b = nil;
__weak id c = nil;
//修饰特性我们用不带下划线的,表示一样
@property (nonato...
点我阅读更多...
iOS逆向工程-dumpdecrypted砸壳
近期想打开大门学习下同行们的iOS开发,于是想到了可以针对一些有特色的应用进行逆向工程,然后着重学习下该应用的设计架构。
由于自己也是初学者,下来就把自己躺过的坑记录在这里方便后续查阅。
逆向工程需要的工具
dumpdecrypted
dumpdecrypted是一个砸壳工具。因为appstore安装包apple会为应用加上一层壳,所以在逆向之前我们需要先对应用进行砸壳。官方对dumpdecrypted描述是
Dumps decrypted iPhone Applications to a file
详细信息可以参考dumpdecrypted
class-dump
为什么是class-dump
It’s a great too...
点我阅读更多...
常用的图形变换
坐标系
坐标系在开发过程中常分为世界坐标系和屏幕坐标系
通常我们的坐标系采用右手型,下图展示了左手坐标系和右手坐标系的区别
左手坐标系,伸出左手用大拇指指向方向轴的方向,其余4个手指自然弯曲,则4指弯曲方向为角度变化的正方向
右手坐标系和左手坐标系对称,只需将左右换成右手即可
iOS采用的是左手坐标系
向量的变换
图像上每个点的位置可以看成一个向量n维向量,取决于图像的空间。所以对图像的变换可以等价于对向量的变换,研究向量的变换可以让我们更直观的了解图像变换的原理
向量的平移(对坐标系内某点得移动)
向量的缩放
X饭方向缩放a倍,Y方向缩放b倍,则有
向量的旋转
二位平面的向量旋转,即可以表示为三维空间的向量绕Z轴的旋转
如图:
将向量x在...
点我阅读更多...
获取iOS设备信息
由于最近要做iPhone6和iPhone6+的适配工作,所以难免会需要对设备型号进行判断,就借此机会总结下判断设备的方法
获取iOS设备信息
1.根据屏幕宽度大小进行判断
#define iPhone6 ([UIScreen instancesRespondToSelector:@selector( currentMode )] ? CGSizeEqualToSize(CGSizeMake(750, 1334), [[UIScreen mainScreen] currentMode].size) : NO)
#define iPhone6Plus ([UIScreen instancesRespondToSelector:@selector( currentMode ...
点我阅读更多...
iOS测量代码执行时间
iOS准确的测量系统执行时间:在iOS的开发过程中,经常会为了满足严苛的用户体验要求,需要对某些功能和模块的执行时间进行控制,那么问题来了,如何高效的检测代码的执行时间
涉及的API
先来认识几个API,他们被包含在
<mach/mach_time.h>
在使用前我们需要先
#import <mach/mach_time.h>
进入mach_time.h文件,我们可以看到如下内容
struct mach_timebase_info {
uint32_t numer;
uint32_t denom;
};
typedef struct mach_timebase_info *mach_timebase_info_t;
typedef s...
点我阅读更多...
CocoaPods问题总结
在项目接入cocoapods后,打包机器打包方面暴漏和很多问题。总会莫名其妙的发生错误,让大家手足无措。
这里我来总结下常见的一些问题的处理方案,方便大家在日后的项目测试中做到有的放矢。
1.找不到相应的库
找不到相应的库的问题,我碰到的有两个原因
1.打包机器没有添加framework对应的源(如何添加源,请继续往下看)
2.本地cocoapods的版本与打包机器上cocoapods的版本不一致,这个问题通常是由于本地的版本高于MTL版本造成的
2.找不到相应的target
由于工程的迁移,或者开发人员的误操作,会造成本地target的丢失。这样在命令行打包过程中,会暴找不到target的错误,这时我们只需要将针对与个人的target设置成shared即可,如下:
重要:这里需...
点我阅读更多...
实现组合的C++代码
这些代码,验证了实现组合的一个算法。较为高效。运作原理就是常说的用二进制标志位标示选取的数字。
代码部分应该已经实现了所需的各个子函数,但是这个只是demo,如需要使用,需要检测是否有完备性问题。
现在将代码贴在这里:
#include
using std::cout;
using std::cin;
using std::endl;
#include
using std::string;
string createHelperStr(int maxCount,int subCount);
string* combination(string str,int subCount);
string sortStrASC(string str);
void printCombinatio...
点我阅读更多...