【知识】OC笔记零散知识点

  1. #import 只包含一次 预处理
  2. 框架:功能集,封装好的功能
  3. 自动释放池,代码写在池中,也可不用池
  4. NSLog函数,会输出一些调试信息,比如时间,进程:线程编号,会自动换行
  5. touch main.m cc -c xx.m cc xx.0 -framework ./xx.out
  6. Bool类型 一字节有符号的char变量 YES1,Boolean 无符号,define宏定义,大部分用bool。
  7. id类型 万能指针
  8. 类方法不能直接访问属性,属性是在创建对象的时候一起创建,类加载只有在第一次访问的时候,把类的代码存储在代码段
  9. 对象方法只能通过对象调用,类方法不能通过self直接调用当前的对象方法
  10. 类方法节约空间,提高效率,当不需要访问属性或调用其他对象方法的时候定义为类方法
  11. %p打印指针的水指针变量的值,即地址,%@打印的水指针变量指向的对象
  12. Instancetype作为返回值,表示返回的是当前这个类的对象
  13. unichar实际就是unsigned short 占据两个字节 汉字占两个字节, %C
  14. == 比较的是两个字符串的地址,类型也要相等,字符串常量池
  15. 创建的对象没有任何指针指向它为匿名对象,指针为名字,匿名对象创建返回的对象的地址,直接使用[[]xx],匿名对象使用一次
  16. Oc中static不能修饰属性和方法,能修饰方法中的局部变量,变量变成静态变量,存储在常量区,方法执行完毕后不会回收,下次直接使用不用再声明,c中的static可以修饰局部变量,全局变量,修饰函数
  17. Self是一个指针,在对象方法中指向当前对象,在类方法中self指向当前类,方法中存在同名的局部变量,直接写是访问局部变量, 用self访问当前对象的同名属性
  18. Super只能用来调用父类的对象方法或类方法,不能访问属性。
  19. 结构体变量分配在栈空间(一个局部变量),对象分在堆空间
  20. 类是以calss形式存储在代码段中,调用类的类方法class就可以拿到存储类的类对象地址,调用对象的对象方法class就可以得到存储这个对象所属的类,声明class指针不需要*
  21. Sel为selector选择器,是一个数据类型,sel对象是用来存储一个方法,方法的本质是一个sel消息,是一个tyoedef类型,不需要*
  22. 消息机制,调用方法的本质就是为对象发送sel消息
  23. 点语法在编译器编译的时候会被转换为调用setter方法的代码
  24. @property,自动生成getter和setter方法的声明,写在interface类的声明之中
  25. 一个指针指向的对象是一个本类对象是静态类型,不是的话是动态类型(多态)
  26. 编译的时候检查指针的类型,运行的时候检查对象,编译看左,运行看右
  27. Nsobject和id都是万能指针,都可以指向任意的oc对象,但id不会进行编译检查,nsobject会,id只能调用对象的方法,不能使用点语法
  28. Instancetype代表方法的返回值是当前这个类的对象,只能作为方法的返回值,不能在别的地方使用。id既可以声明指针变量,也可以作为参数,也可以作为返回值,id是一个无类型的指针,仅仅是个地址
  29. Oc中的野指针,指针指向的对象已经被回收了;c语言中的野指针,没有初始化,指向随机空间
  30. 一个已经被释放的对象,这个对象所占的空间还没有被分配给别人,这样的对象叫做僵尸对象,只要成为僵尸对象,无论如何都不允许访问
  31. 多线程相关参数,nonatomic效率高,atomic生成setter方法会被加上一线程安全锁
  32. Import是将指定的文件内容拷贝到写指令的地方,@class并不会拷贝任何内容,只是告诉编译器这是一个类
  33. 相互引用解决方案,一端retain,一端assign,两边是strong,会内存泄漏,解决方案一端使用strong,一端使用weak
  34. 当自动释放池结束的时候,仅仅是对存储在自动释放池的对象发送一条release消息,而不是销毁对象,通过类方法创建的对象是已经被autorelease过的
  35. ARC机制下对象的回收标准,当没有任何强类型的指针指向对象的时候,这个对象会被立即回收
  36. Retain只能使用在MRC模式下,当属性类型都是oc对象时候,绝大数情况下使用retain,只有出现了循环引用的时候一边retain一边assign,在ARC和MRC模式下都可以使用assign,当属性的类型都是非oc对象时候使用assign
  37. Strong只能使用在ARC机制上,当属性类型是oc对象时候,绝大多数情况下使用strong,只有循环引用的时候,一段strong,一端weak
  38. 程序使用ARC机制开发,某些类需要MRC,使用命令 -fno-objc-arc
  39. 分类的作用,将一个类分为多个模块,分类只能增加方法,不能增加属性,在分类中写property不会自动生成私有属性和gettersetter实现,只会生成getter和setter生命,在分类方法实现中不可以直接访问本类的私有属性,但是可以调用本类的gettersetter来访问属性
  40. 为系统自带的类写分类为非正式协议,分类作用是可以为一个已经存在的类添加方法
  41. ARC不是运行时在编译的时候合适地方插入retain,GC垃圾回收机制是在运行期间有个垃圾回收期,不断扫描堆中的对象是否无人使用
  42. 延展extension是一个特殊的分类,也是类的一部分,延展这个特殊的分类没有名字,只有声明没有实现,和本类共享一个实现,延展没有名字是一个匿名的分类,分类只能新增方法,延展中任意的成员都可以写,延展@propetry,都能生成
  43. 延展的应用场景,可以为类写一个私有的property,写在延展中的成员,相当于类的私有成员
  44. Blocks类型的变量中专门存储一段代码,这段代码于有参数,可以有返回值,对 block 修饰 Strong,copy 都可以,建议使用 copy. block 声明默认为栈变量,为了能够在block的声明域外使用,所以要把block拷贝(copy)到堆,所以说为了block属性声明和实际的操作一致,最好声明为copy
  45. 协议是一系列标准的方法列表,可以被任何类实现.
  46. 分类方法执行优先级高于本类
  47. 当方法内部需要执行一个功能,但是这个功能具体的实现函数的内部不确定用block
  48. 当用字符串常量来初始化字符串指针的时候,这个字符串对象是存储在常量区(数据段)中,当我们调用类方法创建的时候是存储在堆区的
  49. 当在内存中创建一个字符串对象已获,这个字符串对象的内容就无法更改,当重新为字符串指针初始化值得时候,并不是修改原来的字符串对象,而是重新的创建一个字符串对象,将这个字符串对象的地址重新复制给字符串指针变量,nsmutablestring可以修改,用来做大批量的字符串拼接,效率低下
  50. Nil本质是0,无法存储到nsarray中
  51. nsmutablearray是nsarray的扩展,可以动态的新增和删除。
  52. 在arc的模式下,集合的元素是一个强类型的指针
  53. Nsrange,cgpoint,cgsize,cgrect都说结构体,它们的变量都说无法存储到集合之中,解决方案是先将结构体变量存储到oc对象中,再加oc对象存储到集合中,nsvalue类的对象就算用来包装结构体变量的
  54. 若字符串对象存储在常量区,存储在常量区的数据是不允许被回收的,所以存储在常量区的字符串对象的引用计数器是一个超大的数,并且retain和release无效,若字符串存储在堆区,这个字符串对象和普通的对象一样,引用计数器默认是1,字符串如果是浅拷贝,会将对象的引用计数器+1,如果是深拷贝,原来对象的引用计数器不变,新拷贝出来的对象的引用计数器为1
  55. 想要我们自己的类具备对象拷贝的能力,就要让类遵守nscoping协议并实现copyWithZone这个方法,如果要实现深拷贝,就重新创建一个对象,并将对象的属性值复制返回,如果要实现浅拷贝,那么直接返回self
  56. 无论如何创建对象,最终都会调用alloc方法来创建对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值