1.xcode8 去掉繁琐的打印
选择Product->Scheme->Edit Scheme ...或者直接按 command + shift + < 快捷键,在弹出的窗口中Environment Variables 下添加 OS_ACTIVITY_MODE disable如图:
- API查看
windows ->documentation and api reference
3.关于block
介绍https://bestswifter.com/oche-swiftbi-bao-dui-bi-zong-jie/
- 懒加载:
-(NSMutableArray *)testarray
{
if(_testarray == nil)
{
_testarray = [NSMutableArray array];
}
return _testarray;
}
5.判断字符串中是否含有小数点 方案一:
if ([item.ws_total_amt rangeOfString:@"."].location != NSNotFound) {
NSLog(@"这个字符串中有dian");
number=item.ws_total_amt;
}else{
number=[NSString stringWithFormat:@"%@.00",item.ws_total_amt];
}
在用的时候 一定要 用 [self.testarray ........]
方案2:传送门 http://www.cnblogs.com/denz/p/5330771.html
先叙述下我遇到的问题,我的服务器传给我的是一个float的值,作为一个对外的库,由于存在版本延续,需要保留对外的flaot的类型,不改变API,选择进行内部适配。
问题引出
float a = 0.01;
int b = 99999999;
double c = 0.0;
c = a*b;
NSLog(@"%f",c); //输出结果为 1000000.000000
NSLog(@"%.2f",c); //输出结果为 1000000.00
//明显不够精确
在网上找到了一个国内朋友的博客也遇到和我一样的问题,他尝试了如下两种解决方案
将float强制转换为double
c = a*(double)b;
NSLog(@"%f",c); //输出结果 999999.967648
NSLog(@"%.2f",c); //输出结果 999999.97
// 明显已经丢失精度
通过和NSString的转换,将计算的原始数据转换为纯粹的double类型的数据,这样的计算精度就可以达到要求了
NSString *objA = [NSString stringWithFormat:@"%.2f", a];
NSString *objB = [NSString stringWithFormat:@"%.2f", (double)b];
c = [objA doubleValue] * [objB doubleValue];
NSLog(@"%.2f",c); //输出结果 999999.99
最终方案
NSString *decimalNumberMutiplyWithString(NSString *multiplierValue,NSString *multiplicandValue)
{
NSDecimalNumber *multiplierNumber = [NSDecimalNumber decimalNumberWithString:multiplierValue];
NSDecimalNumber *multiplicandNumber = [NSDecimalNumber decimalNumberWithString:multiplicandValue];
NSDecimalNumber *product = [multiplicandNumber decimalNumberByMultiplyingBy:multiplierNumber];
return [product stringValue];
}
NSLog(@"%@",decimalNumberMutiplyWithString([NSString stringWithFormat:@"%f",a], [NSString stringWithFormat:@"%d",b]));
//输出结果 999999.99
6.wkwebview 一些坑 你是否踩过咧??
https://mp.weixin.qq.com/s/rhYKLIbXOsUJC_n6dt9UfA
以及这个人的网站:https://bestswifter.com/
7.单例弊端?
优点:
1:一个类只被实例化一次,提供了对唯一实例的受控访问。
2:节省系统资源
3:允许可变数目的实例。
缺点:
1:一个类只有一个对象,可能造成责任过重,在一定程度上违背了“单一职责原则”。
2:由于单利模式中没有抽象层,因此单例类的扩展有很大的困难。
3:滥用单例将带来一些负面问题,如为了节省资源将数据库连接池对象设计为的单例类,可能会导致共享连接池对象的程序过多而出现连接池溢出;如果实例化的对象长时间不被利用,系统会认为是垃圾而被回收,这将导致对象状态的丢失
8.介绍下App启动的完成过程?
-
App启动过程
• 解析Info.plist
▪ 加载相关信息,例如如闪屏
▪ 沙箱建立、权限检查• Mach-O加载
▪ 如果是胖二进制文件,寻找合适当前CPU类别的部分
▪ 加载所有依赖的Mach-O文件(递归调用Mach-O加载的方法)
▪ 定位内部、外部指针引用,例如字符串、函数等
▪ 执行声明为attribute((constructor))的C函数
▪ 加载类扩展(Category)中的方法
▪ C++静态对象加载、调用ObjC的 +load 函数• 程序执行
· 1.main函数
· 2.执行UIApplicationMain函数
· 1.创建UIApplication对象
· 2.创建UIApplicationDelegate对象并复制
· 3.读取配置文件info.plist,设置程序启动的一些属性,(关于info.plist的内容可网上搜索下)
· 4.创建应用程序的Main Runloop循环
· 3.UIApplicationDelegate对象开始处理监听到的事件
· 1.程序启动成功之后,首先调用application:didFinishLaunchingWithOptions:方法,
· 如果info.plist文件中配置了启动storyboard文件名,则加载storyboard文件。
· 如果没有配置,则根据代码来创建UIWindow--->UIWindow的rootViewController-->显示
9.怎么防止反编译?
1.本地数据加密
iOS应用防反编译加密技术之一:对NSUserDefaults,sqlite存储文件数据加密,保护帐号和关键信息
2.URL编码加密
iOS应用防反编译加密技术之二:对程序中出现的URL进行编码加密,防止URL被静态分析
3.网络传输数据加密
iOS应用防反编译加密技术之三:对客户端传输数据提供加密方案,有效防止通过网络接口的拦截获取数据
4.方法体,方法名高级混淆
iOS应用防反编译加密技术之四:对应用程序的方法名和方法体进行混淆,保证源码被逆向后无法解析代码
5.程序结构混排加密
iOS应用防反编译加密技术之五:对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低