欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS开发进阶(唐巧)读书笔记(一)

程序员文章站 2023-11-09 21:03:04
如何提高iOS开发技能 1、阅读博客: "https://github.com/tangqiaoboy/iOSBlogCN" 40多位iOS开发博主的博客地址 2、读书:每年阅读一本高质量的iOS开发书籍 3、看WWDC视频 4、看苹果的官方文档 5、看开源项目的代码 6、多写代码,多思考 7、多和 ......

如何提高ios开发技能

1、阅读博客:https://github.com/tangqiaoboy/iosblogcn 40多位ios开发博主的博客地址
2、读书:每年阅读一本高质量的ios开发书籍
3、看wwdc视频
4、看苹果的官方文档
5、看开源项目的代码
6、多写代码,多思考
7、多和同行进行交流
8、分享

第一部分:ios开发工具

1、reveal界面调试工具

1、虚拟机集成
2、真机集成(ios开发进阶p47)

vim ~/.lldbinit
command alias reveal_load_sim expr (void*)dlopen("/applications/reveal.app/contents/sharedsupport/ios-libraries/libreveal.dylib", 0x2);
command alias reveal_load_dev expr (void*)dlopen([(nsstring*)[(nsbundle*)[nsbundle mainbundle]               pathforresource:@"libreveal" oftype:@"dylib"] cstringusingencoding:0x4], 0x2);
command alias reveal_start expr (void)[(nsnotificationcenter*)[nsnotificationcenter defaultcenter]           postnotificationname:@"ibarevealrequeststart" object:nil];
command alias reveal_stop expr (void)[(nsnotificationcenter*)[nsnotificationcenter defaultcenter]            postnotificationname:@"ibarevealrequeststop" object:nil];

2、移动统计工具

国外:flurry(不会被墙)
国内:友盟

3、crash统计工具

crashlytics
bugly(腾讯)

4、app store统计工具

app annie

第二部分:ios开发实践

1、corefoundation对象的内存管理

  • cfstringref
cfstringcreatewithcstring(kcfallocatordefault, “hello world”, kcfstringencodingutf8)
  • cf对象转换成oc对象

    1. __bridge:只做类型转换,不修改相关对象的引用计数,原来的cf对象在不用时,需要调用cfrelease方法
    2. __bridge_retained:类型转换后,将相关对象的引用计数加1,原来的cf对象在不用时,需要调用cfrelease方法
    3. __bridge_transfer:类型转换后,将对象的引用计数交给arc管理,cf对象在不用时,不在需要调用cfrelease方法

2、gcd

  • 执行一次
    dispatch_once 代码提示
  • 延迟执行
    dispatch_after 代码提示
  • 自定义queue
dispatch_queue_t urls_queue = dispatch_queue_create(“blog.devzhang.com”, null);
dispatch_async(urls_queue, ^{

});
dispatch_release(urls_queue);
  • 多线程处理,最后汇总结果(具体使用?)
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
    // 并行执行的线程一
});
dispatch_group_async(group, dispatch_get_global_queue(0, 0), ^{
    // 并行执行的线程二
});
dispatch_group_notify(group, dispatch_get_global_queue(0, 0), ^{
    // 汇总结果
});

1、nsjsonserializationnskeyarchiver 更好

在选择持久化方案时,系统提供的 nsjsonserializationnskeyarchiver 在效率和体积上都更好。
nsjsonserializationnskeyarchiver 快了7倍,体积小了一半
网上有详细的测试:https://github.com/randomsequence/nsserialisationtests

2、慎用block

block容易产生循环引用问题
从架构层面来看,如果在使用 block 时需要时刻注意避免循环引用问题。那么还不如不使用 block。用 delegate 来实现要安全的多

注意:类方法绝不会产生循环引用!

3、忽略编译警告⚠️