美文网首页
自己整理的知识点02

自己整理的知识点02

作者: Coder大雄 | 来源:发表于2016-09-13 21:38 被阅读11次

    Objective-C 中是否支持垃圾回收机制?

    • OC是支持垃圾回收机制的(Garbage collection简称GC),但是apple的移动终端中,是不支持GC的,Mac桌面系统开发中是支持的.

    • 移动终端开发是支持ARC(Automatic Reference Counting的简称),ARC是在IOS5之后推出的新技术,它与GC的机制是不同的。我们在编写代码时, 不需要向对象发送release或者autorelease方法,也不可以调用delloc方法,编译器会在合适的位置自动给用户生成release消息(autorelease),ARC 的特点是自动引用技术简化了内存管理的难度.

    当我们调用一个静态方法时,需要对对象进行 release 吗?

    • 不需要,静态方法(类方法)创建一个对象时,对象已被放入自动释放池。在自动释放池被释放时,很有可能被销毁。

    在某个方法中 self.name = _name,name = _name 它 们有区别吗,为什么?

    • 前者是存在内存管理的setter方法赋值,它会对_name对象进行保留或者拷贝操作

    • 后者是普通赋值

    • 一般来说,在对象的方法里成员变量和方法都是可以访问的,我们通常会重写Setter方法来执行某些额外的工作。比如说,外部传一个模型过来,那么我会直接重写Setter方法,当模型传过来时,也就是意味着数据发生了变化,那么视图也需要更新显示,则在赋值新模型的同时也去刷新UI。

    UITableViewCell上有个UILabel,显示NSTimer实现的秒表时间,手指滚动cell过程中,label是否刷新,为什么?

    • 这是否刷新取决于timer加入到Run Loop中的Mode是什么。Mode主要是用来指定事件在运行循环中的优先级的,分为:

    • NSDefaultRunLoopMode(kCFRunLoopDefaultMode):默认,空闲状态

    • UITrackingRunLoopMode:ScrollView滑动时会切换到该Mode

    • UIInitializationRunLoopMode:run loop启动时,会切换到该mode

    • NSRunLoopCommonModes(kCFRunLoopCommonModes):Mode集合
      苹果公开提供的Mode有两个:

    • NSDefaultRunLoopMode(kCFRunLoopDefaultMode)

    • NSRunLoopCommonModes(kCFRunLoopCommonModes)

    • 在编程中:如果我们把一个NSTimer对象以NSDefaultRunLoopMode(kCFRunLoopDefaultMode)添加到主运行循环中的时候, ScrollView滚动过程中会因为mode的切换,而导致NSTimer将不再被调度。当我们滚动的时候,也希望不调度,那就应该使用默认模式。但是,如果希望在滚动时,定时器也要回调,那就应该使用common mode。

    网络七层协议

    • 应用层:
      1.用户接口、应用程序;
      2.Application典型设备:网关;
      3.典型协议、标准和应用:TELNET、FTP、HTTP

    • 表示层:
      1.数据表示、压缩和加密presentation
      2.典型设备:网关
      3.典型协议、标准和应用:ASCLL、PICT、TIFF、JPEG|MPEG
      4.表示层相当于一个东西的表示,表示的一些协议,比如图片、声音和视频MPEG。

    • 会话层:
      1.会话的建立和结束;
      2.典型设备:网关;
      3.典型协议、标准和应用:RPC、SQL、NFS、X WINDOWS、ASP

    • 传输层:
      1.主要功能:端到端控制Transport;
      2.典型设备:网关;
      3.典型协议、标准和应用:TCP、UDP、SPX

    • 网络层:
      1.主要功能:路由、寻址Network;
      2.典型设备:路由器;
      3.典型协议、标准和应用:IP、IPX、APPLETALK、ICMP;

    • 数据链路层:
      1.主要功能:保证无差错的疏忽链路的data link;
      2.典型设备:交换机、网桥、网卡;
      3.典型协议、标准和应用:802.2、802.3ATM、HDLC、FRAME RELAY;

    • 物理层:
      1.主要功能:传输比特流Physical;
      2.典型设备:集线器、中继器
      3.典型协议、标准和应用:V.35、EIA/TIA-232.

    关键字volatile有什么含意?并给出三个不同的例子:

    • 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:
    • 并行设备的硬件寄存器(如:状态寄存器);
    • 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables);
    • 多线程应用中被几个任务共享的变量。

    static 关键字的作用:

    • 函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,
      因此其值在下次调用时仍维持上次的值;
    • 在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
    • 在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明
      它的模块内;
    • 在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
    • 在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。

    C语音标识符

    • 在程序中使用的变量名、函数名、标号等统称为标识符。除库函数的函数名由系统定义外,其余都由用户自定义。C 规定,标识符只能是字母(A~Z,a~z)、数字(0~9)、下划线()组成的字符串,并且其第一个字符必须是字母或下划线。

    • 在使用标识符时还必须注意以下几点:

    • 标准C不限制标识符的长度,但它受各种版本的C 语言编译系统限制,同时也受到具体机器的限制。例如在某版本C 中规定标识符前八位有效,当两个标识符前八位相同时,则被认为是同一个标识符。

    • 在标识符中,大小写是有区别的。例如BOOK和book 是两个不同的标识符。

    • 标识符虽然可由程序员随意定义,但标识符是用于标识某个量的符号。因此,命名应尽量有相应的意义,以便阅读理解,作到“顾名思义”。

    类型所占字节

    • 机器平台:X86_64 处理器 操作系统:Red Hat 4.1.2-14 编译器: gcc version 4.1.2 20070626
    • Size of char is: 1
    • Size of unsigned char is: 1
    • Size of signed char is: 1
    • Size of int is: 4
    • Size of short is: 2
    • Size of long is: 8
    • Size of long int is: 8
    • Size of signed int is: 4
    • Size of unsigned int is: 4
    • Size of unsigned long int is: 8
    • Size of long long int is: 8
    • Size of unsigned long long is: 8
    • Size of float is: 4
    • Size of double is: 8
    • Size of long double is: 16
    • Size of (void *) is: 8
    • Size of (char *) is: 8
    • Size of (int *) is: 8
    • Size of (long *) is: 8
    • Size of (long long *) is: 8
    • Size of (float *) is: 8
    • Size of (double *) is: 8

    ——————————————————————————

    • 机器平台: X86_32 处理器 操作系统: Windows XP SP2 编译器: VS2005自带的C++编译器
    • Size of char is: 1
    • Size of unsigned char is: 1
    • Size of signed char is: 1
    • Size of int is: 4
    • Size of short is: 2
    • Size of long is: 4
    • Size of long int is: 4
    • Size of signed int is: 4
    • Size of unsigned int is: 4
    • Size of unsigned long int is: 4
    • Size of long long int is: 8
    • Size of unsigned long long is: 8
    • Size of float is: 4
    • Size of double is: 8
    • Size of long double is: 8
    • Size of (void *) is: 4
    • Size of (char *) is: 4
    • Size of (int *) is: 4
    • Size of (long *) is: 4
    • Size of (long long *) is: 4
    • Size of (float *) is: 4
    • Size of (double *) is:

    自己打印的

    • int 4
    • double 8
      *float 4
    • NSString 8
    • short 2

    与或非

    int main()
    {
        int a = 5 > 3; // 表示真
        int b = 5 < 3; // 表示假
    
        int x = a && a;
        int y = a && b;
        int z = b && b;
        printf("x = %d, y = %d, z = %d\n", x, y, z);
    
        x = a || a;
        y = a || b;
        z = b || b;
        printf("x = %d, y = %d, z = %d\n", x, y, z);
    
        x = !a;
        y = !b;
        z = !(!a);
        printf("x = %d, y = %d, z = %d\n", x, y, z);
    
        return 0;
    }
    

    逻辑与:两边都为真时返回真,否则返回假;

    逻辑或:只要任意一个为真就返回真,否则返回假;

    逻辑非:符号右边是真,则返回假;符号右边是假,则返回真。

    位运算

    • ~取反,0取反是1,1取反是0

    • <<是左移,比如1<<n,表示1往左移n位,即数值大小2的n次方

    • 右移,类似左移,数值大小除以2的n次方

    • &按位与,1与任意数等于任意数本身,0与任意数等于0,即1&x=x,0&x=0

    • |按位或,x|y中只要有一个1则结果为1

    • ^按位异或, x ^ y相等则为0,不等则为1

    • 所有数值必须转换为二进制数才能位运算,每一位数相对应运算(好像都是按照2进制算的)

    SDWebImage 加载图片的流程

    • 入口 setImageWithURL:placeholderImage:options: 会先把 placeholderImage 显示,然后 SDWebImageManager 根据 URL 开始处理图片。
    • 进入 SDWebImageManager-downloadWithURL:delegate:options:userInfo:,交给 SDImageCache 从缓存查找图片是否已经下载 queryDiskCacheForKey:delegate:userInfo:.
    • 先从内存图片缓存查找是否有图片,如果内存中已经有图片缓存,SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo: 到 SDWebImageManager。
    • SDWebImageManagerDelegate 回调 webImageManager:didFinishWithImage: 到 UIImageView+WebCache 等前端展示图片。
    • 如果内存缓存中没有,生成 NSInvocationOperation 添加到队列开始从硬盘查找图片是否已经缓存。
    • 根据 URLKey 在硬盘缓存目录下尝试读取图片文件。这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调 notifyDelegate:。
    • 如果上一操作从硬盘读取到了图片,将图片添加到内存缓存中(如果空闲内存过小,会先清空内存缓存)。SDImageCacheDelegate 回调 imageCache:didFindImage:forKey:userInfo:。进而回调展示图片。
    • 如果从硬盘缓存目录读取不到图片,说明所有缓存都不存在该图片,需要下载图片,回调 imageCache:didNotFindImageForKey:userInfo:。
    • 共享或重新生成一个下载器 SDWebImageDownloader 开始下载图片。
    • 图片下载由 NSURLConnection 来做,实现相关 delegate 来判断图片下载中、下载完成和下载失败。
    • connection:didReceiveData: 中利用 ImageIO 做了按图片下载进度加载效果。
    • connectionDidFinishLoading: 数据下载完成后交给 SDWebImageDecoder 做图片解码处理。
    • 图片解码处理在一个 NSOperationQueue 完成,不会拖慢主线程 UI。如果有需要对下载的图片进行二次处理,最好也在这里完成,效率会好很多。
    • 在主线程 notifyDelegateOnMainThreadWithInfo: 宣告解码完成,imageDecoder:didFinishDecodingImage:userInfo: 回调给 SDWebImageDownloader。
    • imageDownloader:didFinishWithImage: 回调给 SDWebImageManager 告知图片下载完成。
    • 通知所有的 downloadDelegates 下载完成,回调给需要的地方展示图片。
    • 将图片保存到 SDImageCache 中,内存缓存和硬盘缓存同时保存。写文件到硬盘也在以单独 NSInvocationOperation 完成,避免拖慢主线程。
    • SDImageCache 在初始化的时候会注册一些消息通知,在内存警告或退到后台的时候清理内存图片缓存,应用结束的时候清理过期图片。
    • SDWI 也提供了 UIButton+WebCache 和 MKAnnotationView+WebCache,方便使用。
    • SDWebImagePrefetcher 可以预先下载图片,方便后续使用

    Normal
    0
    10 pt
    0
    2
    false
    false
    false
    EN-US
    ZH-CN
    X-NONE

    $([{£¥·‘“〈《「『【〔〖〝﹙﹛﹝$(.[{£¥
    !%),.:;>?]}¢¨°·ˇˉ―‖’”…‰′″›℃∶、。〃〉》」』】〕〗〞︶︺︾﹀﹄﹚﹜﹞!"%'),.:;?]`|}~¢

    /* Style Definitions */table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:Cambria; mso-ascii-font-family:Cambria; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Cambria; mso-hansi-theme-font:minor-latin; mso-font-kerning:1.0pt;}

    关键字const什么含义?

    const int a;

    int const a;

    const int *a;

    int const *a;

    int * const a;

    int const * const a;

    1> 前两个的作用是一样:a 是一个常整型数

    2> 第三、四个意味着 a 是一个指向常整型数的指针(整型数是不可修改的,但指针可以)

    3> 第五个的意思:a 是一个指向整型数的常指针(指针指向的整型数是可以修改的,但指针是不可修改的)

    4> 最后一个意味着:a 是一个指向常整型数的常指针(指针指向的整型数是不可修改的,同时指针也是不可修改的)

    相关文章

      网友评论

          本文标题:自己整理的知识点02

          本文链接:https://www.haomeiwen.com/subject/wstvettx.html