开发问题汇总和笔记

一 在苹果的api中,NSInteger是个封装,它会自动识别当前操作系统的位数,返回最大数据类型,CGFloat在32位数是float 在64位位double,对于需要兼容的程序而言,需要用到CGFloat ,当然从长久考虑尽量使用CGFloat 尽管32位上相比float增加了一些menory footprint的销毁

二 CFindex;在core Foundation 框架中一般用于数组的序号和参数的返回值的大小,位数随着机器的位数增加而增加,和int位数无关

三 iOS- "_OBJC_CLASS_$_WKWebView", referenced from:

解决方法: 在对ios8以上系统引进WK框架时候,还需要适配ios7出现的错误,若最低版本试ios8,没有这个错误,解决办法是需要导入webkit框

四 Swift Struct 和 Class相同点和不同点

相同点:

1 定义属性用于存储值

2 定义方法用于提供功能

3 定义附属脚本用于访问值

4 定义构造器用于生成初始值

5 通过扩展以增加默认实现的功能

6 通过协议以对某类提供标准功能

Class附加的功能

1 类允许被继承

2 类型转换允许在运行时检查和解释一个类实例的类型

3 允许一个类实例释放任何所被分配的资源

4 引用计数允许对一个类的多次引用

与 Objective-C 语言不同的是,Swift 允许直接设置结构体属性的子属性

在 Swift 中,所有的结构体和枚举类型都是值类型。这意味着它们的实例,以及实例中所包含的任何值类型属性,在代码中传递的时候都会被复制。

Swift 中,许多基本类型,诸如String,Array和Dictionary类型均以结构体的形式实现。这意味着被赋值给新的常量或变量,或者被传入函数或方法中时,它们的值会被拷贝。

Objective-C 中NSString,NSArray和NSDictionary类型均以类的形式实现,而并非结构体。它们在被赋值或者被传入函数或方法时,不会发生值拷贝,而是传递现有实例的引用。

在 Objective-C 中,你只能为 Objective-C 的类类型(classes)定义类型方法(type-level methods)。在 Swift 中,你可以为所有的类、结构体和枚举定义类型方法。每一个类型方法都被它所支持的类型显式包含。

Swift 中的错误处理和其他语言中用try,catch和throw进行异常处理很像。和其他语言中(包括 Objective-C )的异常处理不同的是,Swift 中的错误处理并不涉及解除调用栈,这是一个计算代价高昂的过程。就此而言,throw语句的性能特性是可以和return语句相媲美的。

五 Taggend Pointer

在2013年9月,苹果推出iPhone5s,与此同时,5s搭载采用64位的a7处理器 为了节省内存和执行效率,苹果推出Taggend Pointer概念,对于64位系统,引入Tagged Pointer后,相关逻辑内存减少一半内存,以及3倍的速度.就是把一个对象拆分成2部分,一部分直接保存数据,另一部分作为特殊标记,表示一个特殊的指针,不指向任何地址 在Taggend Pointer 对象中没有isa指针,因为它没有真正对象.

六 Multiple methods named 'count:' found with mismatched result, parameter type or attributes,意思是方法命名冲突,编译器找不到合适的方法用在这里,这是在ARC环境下才会出现的问题,非ARC就没有这个问题,解决的方法有两个,1,把程序改成非ARC,但是这样工作量会很大,尤其是对一些大的项目来说很难实现,2,在函数前面强转一下,告诉编译器到什么地方调用合适的方法,比如在这个程序里我的解决办法就是[(NSMutableArray*)[LetterResultArr objectAtIndex:section] count],这样就没错了

七 label同时设置sizeToFit,NSTextAlignmentCenter不起作用

入坑好长时间原因详见:https://stackoverflow.com/questions/28579776/nstextalignmentcenter-for-uilabel-not-working/35066864#35066864?newreg=725179871da349d698d31b72bdbb3565

解决办法:

sizeTofit方法调用必须在创建label frame之前,不能调换位置,alignment属性同样也是写在frame之前,具体写法详见如下:

NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:tcinfo];        NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];        paragraphStyle.alignment = NSTextAlignmentCenter;        [paragraphStyle setLineSpacing:4];        [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [tcinfo length])];              CGRect cardRect = [tcinfo boundingRectWithSize:CGSizeMake(self.frame.size.width - 10, MAXFLOAT) options: NSStringDrawingUsesLineFragmentOrigin |NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:gxAlterconectLable.font} context:nil];        [gxAlterconectLable sizeToFit];        gxAlterconectLable.frame = CGRectMake(5, self.frame.size.height/3.0, self.frame.size.width - 10, cardRect.size.height);        [self addSubview:gxAlterconectLable];        [gxAlterconectLable setAttributedText:attributedString];

八  iOS 常见的卡顿:

1 CPU卡顿:

  原因:App主线程在CPU中显示内容,比如布局计算,图形解码,文本绘制等,随后CPU把计算好的结果提交给GPU(图形处理器),由GPU进行交换,合成,渲染,随后GPU会把渲染结果提交到帧缓冲区,等待下个垂直同步信号到来时显示到屏幕上,由于垂直同步机制,在垂直同步机制时间内,CPU或者GPU没有完成提交,则那一帧会被丢弃,等待下一次机会显示,则这个时候显示屏因为没有新的刷新,会保留之前的内容不变,就会造成卡顿.

优化

* 尽量使用轻量级的对象.

* 不要频繁使用UIView的相关属性,如frame,bounds,transform等属性,测试发现在UITabView上频繁的创建视图,修改视图的frame等会造成32位系统机器卡顿,64位系统的不怎么明显,UITabView使用频繁,各种奇葩的需求,我们是在使用它时往往忽略了UITabView的性能.找工作面试官会问到UITabView的性能优化相关的问题.

* 图片的size最好和UIimageView的size保持一致,尽量不要做等比例压缩等操作.

* 尽量把耗时的操作放在子线程中,比如网络请求用block轻量级子线程完成,UI在主线程刷新.

2 GPU卡顿优化

* 尽量避免在短时间内加载大量的图片,尽可能将多张图片合成一张图片显示

* 尽量减少视图层级和数量

* 减少透明的视图(alpha<1),不透明的设置opaque为YES

* 尽量避免初选离屏渲染:

在openGL中,GPU渲染有2种渲染方式

(1) On - Screen Rendering :当前屏幕渲染

(2) Off - Screen Rendering : 离屏渲染 

离屏渲染消耗的原因:

(1) 需要创建新的缓冲区

(2) 离屏渲染需要多次切换上下文环境,先是从当前屏幕(On-Screen)切换到离屏(Off-Screen);等到离屏渲染结束以后,将离屏缓冲区的渲染结果显示到屏幕上,又需要将上下文环境从离屏切换到当前屏幕.

那些操作会引起离线渲染?

* 光栅化:layer.shouldRasterize = YES

* 遮罩:layer,mask

*圆角,同时设置masksToBounds = YES

*阴影:layer.shadow,但是设置了layer.shadowPath就不会产生离屏渲染

九 WKWebview返回h5首页

[self.webView goToBackForwardListItem:self.webView.backForwardList.backList.firstObject];

入坑记:

参考安卓的方法:

while (self.webView.canGoBack) { [self.webView goBack]; }

测试发现while为死循环

十 特殊闪退问题

malloc: *** error for object 0x7f9776e12150: double free*** set a breakpoint in malloc_error_break to debug 


十一 图片的解压缩

将压缩图片数据解码成未压缩图片的位图形式,这是个一个非常耗时的cpu操作,而且默认是在主线程中进行,在界面滑动中,可能会内存会飙升,引起出现闪退,甚至手机机身发烫的恶劣情况.

UIwebvie因弹出PickView引起的崩溃

十二 UIwebview因PickView的数组越界崩

     最近有用户反馈,h5界面常有有些选择器(如地市的选择),当h5界面异常的时候,点击弹出选择器,滑动PickView会崩溃,发现这是UIwebview的引起数组越界的bug,UIwebview内部闪退;客户端没法捕捉这个异常,待着好奇心,用WK,发现没有闪退,更换WK;没有对比,就没有伤害,更换WK看样子已经迫在眉睫了

十三 iframe标签在ios失效和界面闪动问题

 详见博客:https://blog.csdn.net/qq_28292937/article/details/78853921

https://blog.csdn.net/XinZhongYi/article/details/5518860

十四 引述cnBeta的消息,苹果今天在其WebKit博客上宣布,他们将从2020年3月开始终止对TLS 1.0和1.1的支持。


js方法

 十五  window.histroy.back 在iOS上无法后退

参考文章:http://www.it1352.com/550444.html  https://bbs.csdn.net/topics/392067078?page=1

十六  iOS11 app内自动连接WiFi 

 ios11 提供了NEHotspotConfigurationManager类直连周边WiFi

引入:NetworkExtension 

Xcode - Capabilities - Hostpot Configuration 勾选

if (@available(iOS 11.0, *)) { NEHotspotConfiguration * hotspotConfig = [[NEHotspotConfiguration alloc] initWithSSID:@"Deli_L1050ADNW_1B0000"]; // 开始连接 (调用此方法后系统会自动弹窗确认) [[NEHotspotConfigurationManager sharedManager] applyConfiguration:hotspotConfig completionHandler:^(NSError * _Nullable error) { NSLog(@"%@",error); if (error && error.code != 13 && error.code != 7) { }else if(error.code ==7){//error code = 7 :用户点击了弹框取消按钮 }else{// error code = 13 :已连接 } }]; } else { // iOS11以下版本逻辑 }

十七

sms://106585185001&body=32018132;2;1:1:1;02,14,15,16,18,21^04

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:nil]]无法打开短信,原因是特殊字符^造成的需要将^编码即可

十八  

检测ios工程是否有p3照片或者16-bit照片的方法

1 .ipa文件解压得到Payload文件夹

2 终端cd your.app

3 用find命令定位Assert.car文件:终端输入:find . -name 'Assets.car'

4 assertutil 命令知道包含16-bit or p3的资源

  sudo xcrun --sdk iphoneos assetutil --info ./Assets.car > /tmp/Assets.json

  5 打开/tmp/Assets.json open /tmp/Assets.json

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生x阅读 15,967评论 3 119
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,082评论 1 32
  • 的确是吃了读书少的亏!我读书少,别骗我~不是脑子不够用,是知识。啊呀! 虽然立夏了,傍晚的风还是很凉。若不是咬咬牙...
    众知阅读 156评论 0 0
  • 《我不过低配的人生》读后感系列之(三) 前两天写的那个《你穷你活该,我富我有理》,很多朋友都认为是三观不正,宣扬拜...
    持续深入学习阅读 1,118评论 -1 5
  • 大数据是我们现在经常听到的一个词,在互联网时代迅速发展的今天,大数据的应用范围越来越广,但是深度学习这个词...
    数据分析师阅读 1,471评论 0 1