前言 做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱。...所以最近准备抽时间把iOS开发的相关知识进行一个梳理,主要分为OC基础、UI控件、多线程、动画、网络、数据持久化、自动布局、第三方框架等几个模块进行梳理。...本系列的所有博文集合参见:iOS开发知识梳理博文集。本文主要介绍 OC基础--字符串。...(BOOL)canBeConvertedToEncoding:(NSStringEncoding)encoding; //4.C字符编码转换 - (nullable __strong const char...*)cStringUsingEncoding:(NSStringEncoding)encoding; //5.判读C字符转化是否可以成功 - (BOOL)getCString:(char *)buffer
前言 做iOS开发有3年了,从当初的小白到现在,断断续续看过很多资料,之前也写过一些博文来记录,但是感觉知识点都比较凌乱。...所以最近准备抽时间把iOS开发的相关知识进行一个梳理,主要分为OC基础、UI控件、多线程、动画、网络、数据持久化、自动布局、第三方框架等几个模块进行梳理。...本系列的所有博文集合参见:iOS开发知识梳理博文集。本文主要介绍 OC基础--数据类型与表达式。...1.1 基本数据类型 因为Objective-C是在C语言基础上拓展出的新语言,所以它是完全兼容C语言代码的,C语言中的基本数据类型都可以正常使用,直接来自C语言中的数据类型如下所示。...NSData等封装类型,有NSDictionary、NSArray、NSSet等集合数据类型,有CGRect/NSRect、CGPoint/NSPoint、CGSize/NSSize等尺寸相关的 ,还有NSRange
1 一张图 先看一张图 某匿名区一名程序员发帖说,国庆和朋友聚会的时候,大家感慨 IOS 十年兴衰史。...当时高中生毕业培训个 IOS 就能进大厂,现在在网上发一个 IOS 的开发岗位,2个小时能收到四五百分简历。 并且其中有一半都是来自大厂,更有一些 6 年经验凌晨联系招聘,12K 就能入职工作。...而市场上的IOS、安卓开发根本不够用,于是工资水涨船高。 2 不只是 IOS 到现在呢? 移动开发早已经饱和的不能再饱和了,大家可以看现在的APP,几乎几年都没咋大变样了。...而这里面不只是 IOS ,安卓开发同样会面临严峻的形势,不过安卓稍微比 IOS 好一点。 有一部分安卓工程师转岗去做了 Java 后端,也算给自己多留了一条路,反观 IOS 这边,真的很无奈。...这样裁员的时候,应该是最后被裁员的。 或者说,选择大公司,大公司比较稳定,选择有红利的行业,行业处于上升期等等。 都是事后诸葛。
那时候招IOS工程师是真的难,几个月过去了安卓都招满了,但IOS就没找到满意了,一怒之下我自己带着下属开始边学边做,最后把项目弄上线了。...随着移动互联网的红利不在,IOS生态每况愈下,但前些年还能勉强维持,今年伴随着整个消费互联网的快速下行,这种现象就更严重了。身边不少干IOS开发的朋友都陆续转行了,也有的被优化后就告别了程序员职业。...恰巧今天还有一个做IOS开发的老读者咨询优化后怎么办的问题: 跟他聊了好久也给出了一些建议,正好也分享给大家: 1.确保安全底线 这个被优化的读者跟其他IOS同行聊过后,产生了直接转行的冲动,他在考虑要么做测试...写在最后的话: 当然IOS开发们还有很多其他出路,比如考公、再比如彻底换行业,又或者开展副业等等,这些就不详述了。...今天上演的剧情在20年前就有过一次:彼时是通讯行业大震荡,曾经的北电、西门子等一众超级巨头轰然倒塌,那些反应迅速的通讯人跳到了互联网,享受到了互联网的黄金20年,而一大批没有行动反应迟钝的通讯人,直到最后一刻被优化就此告别了研发行业
@interface ViewController () @property (nonatomic, strong) NSTimer *timer;//定时...
一文学会iOS蓝牙开发 背景 最近做APP对接蓝牙设备开发,这里分享一下iOS对接蓝牙设备中需要注意的东西,大致包含下面这些方面: Xcode蓝牙权限 如何扫描蓝牙设备、获取Mac地址 不同蓝牙设备切换...初始化蓝牙调用 再开始看代码前,可以先看下面的思维导图,来自iOS蓝牙知识快速入门(详尽版) 有了大致印象后,然后来看右下那部分CoreBluetooth的使用。...辅助方法 大部分转换方法来自IOS 蓝牙通信各种数据类型之间的转换,使用时按需使用即可。...最后当所有完成后,记得断开蓝牙设备的链接。...参考 iOS蓝牙知识快速入门(详尽版) iOS蓝牙开发CoreBluetooth全面讲解 IOS 蓝牙通信各种数据类型之间的转换 iOS 对两个相等长度的字符串进行异或运算 iOS蓝牙开发中的CRC8校验
二、冷启动定义 一般而言,大家把iOS冷启动的过程定义为:从用户点击App图标开始到appDelegate didFinishLaunching方法执行完成为止。...这个过程主要分为两个阶段: T1:main()函数之前,即操作系统加载App可执行文件到内存,然后执行一系列的加载&链接等工作,最后执行至App的main()函数。...我个人创建了一个iOS技术交流群:642363427,群里面大多数都在分享面试题、面试经验,讨论技术,不论你是小白还是大牛都欢迎入驻 ,大家一起交流学习成长 推荐阅读 iOS开发——最新 BAT面试题合集...最后当我们注意到,并想要优化它的时候,这个问题已经变得很棘手了。外卖App的性能问题增量主要来自启动项的增加,随着版本迭代,启动项任务简单粗暴地堆积在启动流程中。...下面我们简要分析一下Dyld在各阶段所做的事情: 最后 dyld 会调用 main() 函数,main() 会调用 UIApplicationMain(),before main()的过程也就此完成。
textView.text.length > 5000) { // 限制5000字内 textView.text = [textView.text substringToIndex:5000]; } iOS7...0 ) { // We are at the bottom of the visible text and introduced a line feed, scroll down (iOS
这个过程主要分为两个阶段: T1:main()函数之前,即操作系统加载App可执行文件到内存,然后执行一系列的加载&链接等工作,最后执行至App的main()函数。...最后当我们注意到,并想要优化它的时候,这个问题已经变得很棘手了。外卖App的性能问题增量主要来自启动项的增加,随着版本迭代,启动项任务简单粗暴地堆积在启动流程中。...selector uniquing) Initializers Objc的+load()函数 - C++的构造函数属性函数 - 非基本类型的C++静态全局变量的创建(通常是类或结构体) 最后...2015年加入美团,目前作为外卖iOS团队主力开发,负责移动端业务开发,业务类基础设施的建设与维护。 徐宏,美团点评资深工程师。...2016年加入美团,目前作为外卖iOS团队主力开发,负责移动端APM性能监控,高可用基础设施支撑相关推进工作。
本文首发于我的个人博客:『不羁阁』 https://bujige.net 文章链接:https://bujige.net/blog/iOS-Foundation-other.html 本文对Foundation...结构体介绍 在iOS开发中,我们经常会用到一些结构体,比如定义矩形原点坐标的结构体CGPoint、定义矩形尺寸的结构体CGSize、同时定义矩形原点和尺寸的结构体CGRect、描述位置和大小范围的结构体...NSRange等。...NSRange 没有CGRange NSRange表示事物的一个范围,通常是字符串里的字符范围或者数组里的元素范围 NSRange有2个成员 NSUInteger location : 表示该范围的起始位置...struct _NSRange { NSUInteger location; NSUInteger length; } NSRange; 可以使用NSMakeRange函数创建NSRange
reserved. 7 // 基本的字符串操作 8 9 #import 10 11 int main(int argc, const char...在str中出现的位置: //获取iOS在str中出现的位置 NSRange pos = [str rangeOfString:@"iOS"]; NSLog...; 14 NSLog(@"%@" , str); 15 16 //获取字符串对应的C风格字符串 17 const char *cstr...在str中出现的位置 39 NSRange pos = [str rangeOfString:@"iOS"]; 40 NSLog(@"ios在str中出现的开始位置:%ld...is string A"; 12 NSString *search , *replace; 13 NSMutableString *mstr; 14 NSRange
这个过程主要分为两个阶段: T1:main()函数之前,即操作系统加载App可执行文件到内存,然后执行一系列的加载&链接等工作,最后执行至App的main()函数。...最后当我们注意到,并想要优化它的时候,这个问题已经变得很棘手了。外卖App的性能问题增量主要来自启动项的增加,随着版本迭代,启动项任务简单粗暴地堆积在启动流程中。...最后 dyld 会调用 main() 函数,main() 会调用 UIApplicationMain(),before main()的过程也就此完成。...2015年加入美团,目前作为外卖iOS团队主力开发,负责移动端业务开发,业务类基础设施的建设与维护。 徐宏,美团点评资深工程师。...2016年加入美团,目前作为外卖iOS团队主力开发,负责移动端APM性能监控,高可用基础设施支撑相关推进工作。
本文首发于我的个人博客:『不羁阁』 https://bujige.net 文章链接:https://bujige.net/blog/iOS-Foundation-String.html 本文对Foundation...从字符串中截取子串- (NSString *)substringWithRange:(NSRange)range; NSString *str = @"程序员"; NSRange...@"10.1"; double res = str1.doubleValue + str2.doubleValue; NSLog(@"res = %f", res); 字符串转为C语言中的字符串- (char...*)UTF8String; NSString *str = @"abc"; const char *cStr = [str UTF8String]; NSLog(@"cStr = %s", cStr...); char *cStr = "abc"; NSString *str = [NSString stringWithUTF8String:cStr]; NSLog(@"str = %@", str);
找到PEM格式publickey的头部和尾部 NSRange spos = [key rangeOfString:@"-----BEGIN PUBLIC KEY-----"]; NSRange...len) return(nil); unsigned char *c_key = (unsigned char *)[d_key bytes]; unsigned int idx...返回的就是TLV中的value值,就是最后的内容 return ([NSData dataWithBytes:&c_key[idx] length:len - idx]); } /** 使用...spos = [key rangeOfString:@"-----BEGIN RSA PRIVATE KEY-----"]; NSRange epos = [key rangeOfString...len) return(nil); unsigned char *c_key = (unsigned char *)[d_key bytes]; unsigned int idx
@property (nullable, readonly) __strong const char *UTF8String 将字符串写入到指定的文件中。...- (NSRange)rangeOfString:(NSString *)searchString; 返回值是1个NSRange类型的结构体变量. typedef struct _NSRange...NSString *str = @"i love iOS love!"...1部分. - (NSString *)substringFromIndex:(NSUInteger)from; 从指定的下标出一直截取到最后. - (NSString *)substringToIndex...NSNumber对象转化为基本数据类型 @property (readonly) char charValue; @property (readonly) unsigned char unsignedCharValue
如何优雅的隐藏UITableView中最后一条分割线? 这个问题是很常见,却又不太容易解决的。 可能通常的做法都是隐藏UITableView的分割线,自定义一条。...UIEdgeInsetsMake(0, FTDefaultMenuTextMargin, 0, 10+FTDefaultMenuTextMargin); } 我们只需要在CellForRow方法中判断是最后一个...注意: 经过测试,上面这种设置cell的separatorInset,来让最后一条分割线不显示出来的做法, 对自定义的Cell有效; 对于UITableViewCell,修改了separatorInset
to specified type 'NSRange?'...// 而下面的addAttribute那句 添加.link的value需要的类型是:NSRange?...和 '完整字符串' 创建 NSRange?..., 如下: let convertedRange = NSRange(range, in: attributedString.string) // NSRange?...URL.absoluteString == "more://" { print("click more") return false } return true } } 参考: iOS
openHeight if lessLine < allLine { closeHeight = CGFloat(lessLine) * lineHeight } 获得前n行的文案:(难点在此,差点放弃,最后在...ios获取UILabel每行显示的文字 这篇文章里找到解决方案) let attributedString = NSMutableAttributedString(string: moAllText,...attributes: moAttributs) attributedString.addAttribute(.paragraphStyle, value: moParagraph, range: NSRange...(location: 0, length: needShowText.count)) // add tap action for link range let linkRange = NSRange(location...富文本添加点击事件 Ranges in Swift explained with code examples ios获取UILabel每行显示的文字
NSUInteger)index concat(string) - (NSString *)stringByAppendingString:(NSString *)aString indexOf(string) - (NSRange...)rangeOfString:(NSString *)aString lastIndexOf(string) - (NSRange)rangeOfString:(NSString *)aString options...componentsSeparatedByString:(NSString *)separator substring(startIndex) - (NSString *)substringWithRange:(NSRange...*))comparator context:(void *)context toString() - (NSString *)description 摘自:Learning the iOS
最近用flutter写ios线上项目,有一个功能让把设备传来的数据加密,而这个坑爹的加密的方法是c语言写的,用flutter各种尝试,始终不能还原c的加密过程, 只能调用ios原生代码,然后用原生代码调用...和 c语言也是一脸懵逼,很简单的东西我搞了2天,先看下各数据的对比 flutter java swift c语言 Uint8List byte[] FlutterStandardTypedData char...[] 1. flutter 发送Uint8List (java种的byte)数据到ios端 ,ios将Uint8List转成FlutterStandardTypedData let uintInt8List...将Uint8 (ios的byte)转成c语言用的char[]数组指针,(可能有更好的转换方法,但是此方法也可行) var pointer = UnsafeMutablePointer.allocate...将ios的Data转换成FlutterStandardTypedData(这个就是flutter的Unit8List,只不过在ios上叫这个名字),我们只要转成FlutterStandardTypedData
领取专属 10元无门槛券
手把手带您无忧上云