疯狂的石头

  • 首页

  • 归档

  • 分类

runtime 理解

发表于 2018-06-08 | 更新于 2018-06-09 | 分类于 iOS

runtime是一套可以进行一些非常底层的用OC无法实现的操作的纯C语言的API。

点击进入官方文档

Objective-C 类由一个指向 objc_class 结构体的指针来表示

1
2
// An opaque type that represents an Objective-C class.
typedef struct objc_class *Class;
阅读全文 »

git flow

发表于 2018-06-08 | 更新于 2018-06-09 | 分类于 随笔

git flow 流程:

日历(NSCalendar)

发表于 2018-06-08 | 更新于 2018-06-09 | 分类于 iOS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//日历
static const NSCalendarUnit CalendarUnitYMD = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
NSCalendar *calendar = [NSCalendar currentCalendar];
//计算当月第一天
NSDateComponents *component = [calendar components:CalendarUnitYMD fromDate:[NSDate date]];
[component setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
component.day = 1;
NSDate *currentDateFirstMonthDay = [calendar dateFromComponents:component];
NSLog(@"%@", currentDateFirstMonthDay);

//计算当月最后一天
component.month++;
component.day = 0;
NSLog(@"%@", [calendar dateFromComponents:component]);

//计算相对日期
NSDateComponents *offsetComponent = [[NSDateComponents alloc] init];
offsetComponent.day = 50;
NSLog(@"%@", [calendar dateByAddingComponents:offsetComponent toDate:currentDateFirstMonthDay options:0]);

//日期对应的星期
NSArray *weekDaySymbols = [[[NSDateFormatter alloc] init] shortWeekdaySymbols];
NSDateComponents *dateComponents = [calendar components:NSCalendarUnitWeekday fromDate:currentDateFirstMonthDay];
NSLog(@"%@", weekDaySymbols[dateComponents.weekday - 1]);

//每个月的周数,iOS8以下使用NSWeekCalendarUnit代替NSCalendarUnitWeekOfMonth
NSRange rangeOfweeks = [calendar rangeOfUnit:NSCalendarUnitWeekOfMonth inUnit:NSCalendarUnitMonth forDate:currentDateFirstMonthDay];
NSLog(@"%ld", (long)rangeOfweeks.length);

//计算日期间的天数,通过修改NSCalendarUnit可以间隔的月、年等等
NSLog(@"%ld", (long)[calendar components:NSCalendarUnitDay fromDate:currentDateFirstMonthDay toDate:[NSDate date] options:0].day);

控制台输出

1
2
3
4
5
6
2016-01-26 23:11:27.038 Test123[6502:707948] 2016-01-01 00:00:00 +0000
2016-01-26 23:11:27.038 Test123[6502:707948] 2016-01-31 00:00:00 +0000
2016-01-26 23:11:27.038 Test123[6502:707948] 2016-02-20 00:00:00 +0000
2016-01-26 23:11:27.039 Test123[6502:707948] 周五
2016-01-26 23:11:27.039 Test123[6502:707948] 6
2016-01-26 23:11:27.040 Test123[6502:707948] 25

oc 自动布局与可视化格式语言

发表于 2018-06-08 | 更新于 2018-06-09 | 分类于 iOS

概述

大多数UI组件的定位可以使用下面的公式来解决:

1
obj1.propery1 = obj2.property2 * multiplier) + constant value

约束是相对于父视图的一个概念

1
2
3
4
5
6
7
8
9
// 约束使用NSLayoutConstraint的类方法来创建:

[NSLayoutConstraint constraintWithItem:(nonnull id) //表示上述公式的obj1
attribute:(NSLayoutAttribute) //代表公式中的property1
relatedBy:(NSLayoutRelation) //代表公式中的等号,可以设置为其他值
toItem:(nullable id) //代表公式中的obj2
attribute:(NSLayoutAttribute) //代表公式中的property2
multiplier:(CGFloat) //代表公式中的乘号
constant:(CGFloat)]; //代表公式中的约束值

当创建完约束之后,就可以便捷的把它们添加到适当的视图中,使用以下UIView类方法:
addConstraint和addConstraints。

阅读全文 »

android apk 文件反编译(Mac)

发表于 2018-06-08 | 更新于 2018-06-09 | 分类于 Android

apktool 安装使用

按照以下提示:(注意root权限即第5条):

使用apktool d xxx.apk进行反编译,得到一个同名的文件夹。里面就有我们需要的布局文件。

dex2jar 安装使用

  1. 将apk文件后缀名直接改为 .zip 并解压。得到其中的 classes.dex 文件 ,它就是java源代码经过编译再通过dx工具打包而成的。
  2. 将 classes.dex 文件复制到 dex2jar 所在的文件夹。
  3. 命令行下定位到 dex2jar 目录,运行:sh dex2jar.sh classes.dex
  4. 用 jd gui 打开生成的 classes_dex2jar.jar 就可以看到源代码了。

JD-GUI 下载

1234…9
Crazy Stone

Crazy Stone

step by step...

42 日志
9 分类
E-Mail GitHub
© 2018 — 2020 Crazy Stone
由 Hexo 强力驱动
|
主题 — NexT.Pisces