茉莉花猫儿 發表於 2019-10-10 11:23:00

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

<blockquote>
<h4 id="如何提高ios开发技能">如何提高iOS开发技能</h4>
<p>1、阅读博客:https://github.com/tangqiaoboy/iOSBlogCN 40多位iOS开发博主的博客地址<br>
2、读书:每年阅读一本高质量的iOS开发书籍<br>
3、看WWDC视频<br>
4、看苹果的官方文档<br>
5、看开源项目的代码<br>
6、多写代码,多思考<br>
7、多和同行进行交流<br>
8、分享</p>
</blockquote>
<h3 id="第一部分ios开发工具">第一部分:iOS开发工具</h3>
<h4 id="1reveal界面调试工具">1、Reveal界面调试工具</h4>
<blockquote>
<p>1、虚拟机集成<br>
2、真机集成(iOS开发进阶P47)</p>
</blockquote>
<pre><code>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*)               pathForResource:@"libReveal" ofType:@"dylib"] cStringUsingEncoding:0x4], 0x2);
command alias reveal_start expr (void)[(NSNotificationCenter*)         postNotificationName:@"IBARevealRequestStart" object:nil];
command alias reveal_stop expr (void)[(NSNotificationCenter*)            postNotificationName:@"IBARevealRequestStop" object:nil];
</code></pre>
<h4 id="2移动统计工具">2、移动统计工具</h4>
<blockquote>
<p>国外:Flurry(不会被墙)<br>
国内:友盟</p>
</blockquote>
<h4 id="3crash统计工具">3、crash统计工具</h4>
<blockquote>
<p>Crashlytics<br>
Bugly(腾讯)</p>
</blockquote>
<h4 id="4app-store统计工具">4、App Store统计工具</h4>
<blockquote>
<p>App Annie</p>
</blockquote>
<h3 id="第二部分ios开发实践">第二部分:iOS开发实践</h3>
<h4 id="1corefoundation对象的内存管理">1、CoreFoundation对象的内存管理</h4>
<ul>
<li>CFStringRef</li>
</ul>
<pre><code>CFStringCreateWithCString(kCFAllocatorDefault, “Hello World”, kCFStringEncodingUTF8)
</code></pre>
<ul>
<li>CF对象转换成OC对象</li>
</ul>
<blockquote>
<ol>
<li>__bridge:只做类型转换,不修改相关对象的引用计数,原来的CF对象在不用时,需要调用CFRelease方法</li>
<li>__bridge_retained:类型转换后,将相关对象的引用计数加1,原来的CF对象在不用时,需要调用CFRelease方法</li>
<li>__bridge_transfer:类型转换后,将对象的引用计数交给ARC管理,CF对象在不用时,不在需要调用CFRelease方法</li>
</ol>
</blockquote>
<h4 id="2gcd">2、GCD</h4>
<ul>
<li>执行一次<br>
<code>dispatch_once</code> 代码提示</li>
<li>延迟执行<br>
<code>dispatch_after</code> 代码提示</li>
<li>自定义queue</li>
</ul>
<pre><code>dispatch_queue_t urls_queue = dispatch_queue_create(“blog.devzhang.com”, NULL);
dispatch_async(urls_queue, ^{

});
dispatch_release(urls_queue);
</code></pre>
<ul>
<li>多线程处理,最后汇总结果(具体使用?)</li>
</ul>
<pre><code>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), ^{
    // 汇总结果
});
</code></pre>
<h4 id="1nsjsonserialization-比-nskeyarchiver-更好">1、<code>NSJSONSerialization</code> 比 <code>NSKeyArchiver</code> 更好</h4>
<blockquote>
<p>在选择持久化方案时,系统提供的 <code>NSJSONSerialization</code> 比 <code>NSKeyArchiver</code> 在效率和体积上都更好。<br>
<code>NSJSONSerialization</code> 比 <code>NSKeyArchiver</code> 快了7倍,体积小了一半<br>
网上有详细的测试:https://github.com/randomsequence/NSSerialisationTests</p>
</blockquote>
<h4 id="2慎用block">2、慎用Block</h4>
<blockquote>
<p><code>block</code>容易产生循环引用问题<br>
从架构层面来看,如果在使用 <code>block</code> 时需要时刻注意避免循环引用问题。那么还不如不使用 <code>block</code>。用 <code>delegate</code> 来实现要安全的多</p>
</blockquote>
<p><strong>注意:类方法绝不会产生循环引用!</strong></p>
<h4 id="3忽略编译警告️">3、忽略编译警告⚠️</h4>
<p>https://blog.csdn.net/denggun12345/article/details/83586790</p><br><br>
来源:https://www.cnblogs.com/gfxxbk/p/11646802.html
頁: [1]
查看完整版本: 【原】iOS开发进阶(唐巧)读书笔记(一)