专栏名称: 程序员大咖
为程序员提供最优质的博文、最精彩的讨论、最实用的开发资源;提供最新最全的编程学习资料:PHP、Objective-C、Java、Swift、C/C++函数库、.NET Framework类库、J2SE API等等。并不定期奉送各种福利。
目录
相关文章推荐
极客之家  ·  22k star,微软硬核开源,让 ... ·  昨天  
程序员的那些事  ·  国民软件 QQ ... ·  2 天前  
稀土掘金技术社区  ·  掘金 AI 编程社区- 人人都是 AI 编程家竞赛 ·  4 天前  
稀土掘金技术社区  ·  为了让 iframe 支持 ... ·  2 天前  
51好读  ›  专栏  ›  程序员大咖

金三银四 程序员跳槽必备 你不可错过的干货!

程序员大咖  · 公众号  · 程序员  · 2018-04-06 10:24

正文

请到「今天看啥」查看全文


1.(&arrayName + 1):&arrayName是数组的地址(等价于指向arrayName数组的指针)

2.增加 1 会往后移动16个字节,开始是4个字节的位置,移动后就是16个字节后面的位置(也就是目前位置是20个字节)

3.最后又赋值给,int类型的指针p(int类型占4个字节)

4.所以(p - 1)就是减去4个字节,变成为16个字节的位置,输出的(p - 1)值为40

int *p = (int *)(&arrayName + 1);

NSLog(@"%d", *(p - 1));//输出结果为 40


5.#import 和#include有 么区别?@class呢?#import <>和 #import"" 有 么区别?


import是OC导入头文件的关键字,#include是C/C++导入头文件的关键字

使用#import只导入一次不会重复导入,相当于#include和#pragma once;(使用#include可能会出现循环引用,使用#pragma once消除这种可能)

@class一般用于声明某个字符串作为类名使用,它只是声明了一个类名,没有导入.h文件中的内容,不会引起交叉编译问题

import< >代表导入系统自带的框架

import" "代表导入我们自己创建的文件,导入的使我们.h文件,也就是头文件


6.属性readwrite.readonly,assign,retain,copy,nonatomic 什么作用 ? 在哪种情况下 ?


readwrite 是可读可写特性;需要生成getter方法和setter方法时(补充:默认属性,将生成不带额外参数的getter和setter方法(setter方法只有一个参数))

readonly 是只读特性  只会生成getter方法 不会生成setter方法 ;不希望属性在类外改变

assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;

retain 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;

copy 表示拷贝特性,setter方法将传入对象复制一份;需要完全一份新的变量时。

nonatomic 非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,一般使

用nonatomic


7.IBOutlet 连出来的视图属性为什么可以被设置成weak?


在 storyboard 中添加一个控件引用关系是这样的(以 UIbutton 为例): UIviewController -> UIview -> UIbutton

此时 UIviewController 强引用着 UIview , UIview 强引用着 UIbutton , IBoutlet 连线到控制器的. m 或者. h 中作为视图的属性时用 weak 修饰就可以了, (觉得用 strong 修饰也可以但是没有必要)

添加到子控件也是强引用: UIbutton 就是添加到了 UIviewController 的 view 上


8  预处 指令define 声明 个常数, 以表明  中有多 少秒(忽 闰 问题)。


define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL


9.重写-个NSString类型的,retain 式声明name属性的 setter和getter 法(MRC)


属性的三大特性:语义特性,原子特性,读写特性.

同时重写setter和getter方法,@synchronized name = _name,关联属性和实例变量

如 -(void)setName:(NSString *)name{

if(_name != name){

[_name retain];

[_name release];

_name = name;

}

}

-(NSString *)name{

return [[_name retain]autorelease]

}


10.分析json、xml 的区别? json、xml 解析 式的底层是如何让处理的


(一)JSON与XML的区别:

(1)可读性方面:基本相同,XML的可读性比较好;

(2)可扩展性方面:都具有良好的扩展性;

(3)编码难度方面:相对而言,JSON的编码比较容易;

(4)解码难度:JSON的解码难度基本为零,XML需要考虑子节点和父节点;

(5)数据体积方面:JSON相对于XML来讲,数据体积小,传递的速度比较快;

(6)数据交互方面:JSON与javascript的交互更加方便,更容易解析处理,更好的数据交互;

(7)数据描述方面:XML对数据描述性比较好

(8)传输速度方面:JSON的速度远远快于XML。

(二)JSON与XML底层实现原理:

(1)JSON底层原理:遍历字符串中的字符,最终根据格式规定的特殊字符,比如{}、[]、:等进行区分,{}号表示字典,[]号表示数组,:号是字典的键和值的分水岭,最终仍是将JSON转化为字典,只不过字典中的值可能是“字典、数组或者字符串而已”。

(2)XML底层原理:XML解析常用的解析方法有两种:DOM解析和SAX解析;DOM采用的是树形结构的方式访问XML文档,而SAX采用的是事件模型;DOM解析把XML文档转化为一个包含其内容的树,并可以对树进行遍历,使用DOM解析器的时候需要处理整个XML文档,所以对内存和性能的要求比较高;SAX在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,他可以激活一个回调方法,告诉该方法指定的标签已经找到,SAX对内存的要求通常会比较低,因为他让开发人员自己来决定所要处理的tag,特别是当开发人员只需要处理文档中所包含部分数据时,SAX这种扩展能力得到了更好的体现。







请到「今天看啥」查看全文