undefined

1. 延展:Extension

是一个特殊的 category(分类),所以延展也是类的一部分。特殊之处:

  1. 延展这个特殊分类没有名字
  2. 只有声明,没有实现。和本类共享一个实现
  3. 只有一个 .h 文件,文件名称:本类名_取得文件名.h 这个文件只有延展的声明。实现可以放在本类中
查看更多

undefined

IOS 多线程:NSOperation & NSOperationQueue

https://www.jianshu.com/p/d973cd1acc32

IOS 线程

主线程又称为 UI 线程。主线程一般用来刷新 UI 界面,处理 UI 事件(比如:点击、滚动、拖拽等事件)。不要将耗时的操作放在主线程

1. 创建多线程的技术

  • pthread:c语言的,跨平台,适用于 Unix/Linux/Windows等系统。线程生命周期需要程序员管理。使用难度大
查看更多

undefined

一、字符串使用优化

使用 NSString 时,字符串拼接我们可能使用

1
2
3
NSString* str = @"hello";
str = [str stringByAppendingString:@"Jack"]; // 拼接字符串
str = [str stringByAppendingFormat:@"%@", @"come on"]; // 拼接格式化字符串

但是如上方式,会使内存占用较大。NSString 有不可修改的特性,因为每次拼接都相当于申请新的内存空间,拼接的过程就是不断开辟新的内存空间的过程。拼接多次会产生大量的内存空间浪费。如何优化呢?

使用 NSMutableString 做字符串拼接

查看更多

undefined

  1. OC 程序的源文件的后缀名是 .m。 m 代表 message。 代表 OC 中最重要的 1 个机制 消息机制

  2. #import 是 #include 的增强版,将文件和内容在预编译的时候拷贝到写指令的地方。增强点:同一个文件无论 #Import 多少次,只会包含一次。#include 只能通过条件编译指令来实现

查看更多

undefined

NSURLSession 网络请求

NSURLSession 可以发起以下任务,默认所有的任务都是挂起的。

以 source code 打开 Info.plist ,然后加上 以下代码就可以访问 http了

1
2
3
4
5
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

一、任务

1. DataTask

执行过程是异步的,默认是 GET 请求

查看更多

undefined

C++ code dump 调试

打开 core dump 开关:ulimit -c unlimited

一、生成一个 core dump

1
2
3
4
5
6
7
8
#include <stdio.h>

int main() {
int* p = NULL;
*p = 0;
printf("%d\n");
return 0;
}

如上代码会生成 core dump,我们使用如下方法进行调试

二、dmesg + addr2line 调试

1
2
3
4
5
➜  [/data/home/noahyzhang/learn/core] dmesg | grep a.out
[10346599.866661] a.out[25068]: segfault at 0 ip 000000000040055b sp 00007fff0228e090 error 6 in a.out[400000+1000]
➜ [/data/home/noahyzhang/learn/core] addr2line -e a.out -f 000000000040055b
main
/data/home/noahyzhang/learn/core/core.c:6

查看更多

undefined

gdb调试工具

在对C/C++ 程序的调试,需要在编译前加上 -g 选项

  • 调试core 文件:gdb program core.11127 :调试 core 文件,program 就是执行文件
  • 调试服务程序:gdb program PID。如果程序是一个服务程序,那么可以指定这个服务程序运行时的进程ID。gdb会自动attach 上去,并调试他,program 应该在 PATH 环境变量中搜索得到

查看更多