1.创建一个类产生.h和.m两个文件,.h中对用到的变量、方法作声明,.m文件中实现,导入时只导入.h文件,如果直接把方法写在.m文件中,未在.h文件中进行声明,则是私有方法 
2.@interface 类名 :NSObject  @end,代表声明一个类,冒号表示继承,不可省,要使用OC中常用的类,那么#import <Foundation/foundation.h>,Foundation框架内有个foundation.h文件,其中包括NSObject。 
3.- (int) getAge;声明函数,-代表动态方法,即有对象才调用的方法,声明静态方法前用+ 方法后有几个冒号就有几个参数,类型用括号括住 4.实现方法时方法名后不带括号 
5.创建类的对象,先调用静态方法alloc分配内存:[类名 alloc],Student *stu=[Student alloc],OC对象一定是指针 
6.开发中这样创建对象,Student *stu=[[Student alloc] init];构造方法init用于初始化,可自己编写 7.调用对象方法,[对象名 方法] 8.自己写一个构造方法(动态的),方法名以init开头,自定义构造方法首先要调用父类构造方法(原因很简单),[super init] 
9.%@占位符代表打印一个对象,打印对象会调用description方法 
10.所有的OC对象都要用指针来指向它,定义一个字符串,NSString *str=@”itcast”; 11.成员变量前要加下划线,_age,_number,默认的规则 12.点语法的本质是调用set方法和get方法 
12.当编译器遇到@property时,会自动展开get方法和set方法的声明 13.@synthesize age,height,number,实现三个变量的方法 14.给对象发送某条消息相当于调用该对象的该方法 15.类名和*是离不开的,除非继承声明时 16.如果自己手动实现了getter和setter,xcode就不会自动生成@synthesize,也就不会自动生出下划线的变量 
17.类内部定义的变量默认作用域是protect的,只能在类内部和子类中访问,提供get方法和set方法供外部访问 
18.动态方法内部的self是指调用当前对象,静态方法内的self是指类名 19.在.h文件中声明的方法是公共方法,不声明而直接写在.m文件中的方法是私有方法,只有.m文件中能使用该方法 
20.stu.age=100本质是调用了set方法,int age= stu.age本质调用了get方法 
21.Student *stu=[Student new]相当于Student *stu=[[Student alloc] init],但前者不能调用自己写的构造方法 
22.在.m文件中用了@synthesize,那么在.h文件中的成员变量定义可省略,因为该变量会在.m文件中自动生成,但是是私有的 
23.@synthesize age;默认访问与age同名的变量,如果找不到则自动生成 
24.@synthesize age = _age,代表getter和setter会去访问_age,如果没有_age也会自动生成。那为啥不直接@synthesize _age啊我去 
25.Xcode4.5之后的版本,如果在.h文件中使用@property age,则会在.m文件中自动生成@synthesize,即自动生成getter和setter,默认访问的是_age变量(也是自动生成) 
26.Xcode关闭arc:在开发中的项目在项目设置的build setting中搜索garbage关键字就可以看到这个选项了,然后选择NO再次运行各种release就不会报警了 
27.验证dealloc方法是否被使用时需要重写父类的dealloc方法,[super dealloc]; 28.OC注释:pragma mark,好处是可以快速定位注释位置 
29.指向已经释放的内存的指针叫野指针,没有指向任何的东西指针叫空指针,OC中野指针会报错,空指针不会报错 
30.set方法的内存管理:只针对参数是对象的set方法,参数是变量的不涉及内存管理
 
31.Student的set方法的参数是类Book的对象时,类Book产生了book对象后要自己释放掉,Student产生的对象stu第一次使用该book对象时要在set方法中对book做retain操作:_book =[book retain],在dealloc方法中对book作release操作:[_book release],第二次使用book2对象要先在set方法中作release,赋值后再做retain,则可多次使用,该操作要先判断当前对象与参数是否相同,一般这样写: 
if(_book!=book){ [_book release];  _book=[book retain];} 这样写的原因再次看视频,语言不好表达 32.retainCount方法获取 对象当前计数器的值 
33.在.h文件中声明对象时用到某个类,用@class关键字声明,在.m文件中实现时再用import导入,这样可提高编译性能 
34.两个类互相拥有对方时,只能用@class而不能用import,原理是C语言两个文件中不能互相拥有 
35.property参数,retain,作用是实现方法时会release旧值,再retain新值 
36.property参数,默认是readwrite,代表既生出get方法又set方法,写readonly时只生出get方法 
37.property参数,默认是atomic,提供方法多线程调用,给get方法和set方法加锁,保证线程安全,nonatomic代表方法不需要考虑线程安全(禁止多线程调用,可提高性能) 
38.语法:property(nonatomic,retain)Book *book;代表book的两个方法不加锁,且需要管理内存 
39.getter和setter也可作为property参数,getter = what ,代表getter的方法名是what 40.[stu autorelease]不会改变对象的计数器值,只是将stu添加到自动释放池中 41.自动释放池被销毁时,里面的所有对象都会调用release方法计数器减一 42.常用写法Student *stu = [[[Student alloc] init] autorelease]; 43.写一个静态方法快速创建对象,方法名最好与类名相同 
44.系统自带的类如NSString,都是已经autorelease的,不需要再进行autorelease操作 
45.静态方法创建的对象都是自动释放的,自己创建的静态方法(如快速创建对象)需要在方法实现中调用autorelease方法 
46.静态方法不能访问对象的成员变量 
47.垃圾回收机制:完全不用管理内存                                                              ARC:编译器自动生成管理内存的代码 
48.不要把大量循环的代码放在同一个自动释放池中,浪费内存 49.尽量不要把占用内存大的对象放入自动释放池 
50.Category,可以在不改变已经存在的一个类的前提下为该类添加一个新的方法,相当于该类的拓展 
51.类名后面有冒号代表继承,类名后面有括号代表分类,括号里是分类名称 52.分类只能扩展方法,不能增加成员变量 
53.Protocol相当于JAVA中的接口,但其中声明的方法可以不全部实现 54.类名(或协议)后面有<>代表实现某个协议,一般是NSObject 55.只有实现了某个协议的对象才能充当按钮的监听器 
56.Block:将一段代码封装到block中,可在任何时候调用这段代码 

Objective-c知识小结的更多相关文章

  1. Android app开发知识小结

    Android知识小结 这是一个知识的总结,所以没有详解的讲解. 一.分辨率Android中dp长度.sp字体使用.px像素.in英寸.pt英寸1/72.mm毫米 了解dp首先要知道density,d ...

  2. C/C++ 位域知识小结

    C/C++ 位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存 ...

  3. JAVA 变量 数据类型 运算符 知识小结

    ---------------------------------------------------> JAVA 变量 数据类型 运算符 知识小结 <------------------ ...

  4. html5-基本知识小结及补充

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  5. HTTPS知识小结

    HTTPS知识小结 背景1:TCP握手 internet上的两台机器A,B要建立起HTTP连接了,在这之前要先建立TCP连接,情景大概是这样子的: A:你好,我跟你建立一个TCP好吗? B:好啊. A ...

  6. shell 环境变量的知识小结

    环境变量的知识小结:·变量名通常要大写.·变量可以在自身的Shell及子Shell中使用.·常用export来定义环境变量.·执行env默认可以显示所有的环境变量名称及对应的值.·输出时用“$变量名” ...

  7. 180531-Spring中JavaConfig知识小结

    原文链接:Spring中JavaConfig知识小结/ Sring中JavaConfig使用姿势 去掉xml的配置方式,改成用Java来配置,最常见的就是将xml中的 bean定义, scanner包 ...

  8. javascript之正则表达式基础知识小结

    javascript之正则表达式基础知识小结,对于学习正则表达式的朋友是个不错的基础入门资料.   元字符 ^ $ . * + ? = ! : | \ / ( ) [ ] { } 在使用这些符号时需要 ...

  9. PS修图知识小结

    PS修图知识小结   [1]人去除红眼. 1.用红眼工具,框选红眼不分. 2.用椭圆选区工具,选择红眼部分 3..创建调整图层,亮度.对比度.加大对比度. 4.选择红眼部分.创建调整图层,可选颜色,减 ...

  10. python基础之八:知识小结及补充

    一.python2 与python3 的区别 1.在2中print后可带扣号,也可不带,3中必须带,否则报错! #print 'hello python2' print('hello python3' ...

随机推荐

  1. A题笔记(1)

    #include <stdlib.h> exit(); #include <stdlib.h> 是 exit(0) 必须的头文件 否则会出现 exit was not decl ...

  2. SQL生成一柱双色球

    数据库环境:SQL SERVER 2005 以前用C/JAVA穷举双色球的所有排列,今天想着换成用SQL实现,只生成一柱双色球. 简单说下双色球的规则,双色球由红色球和蓝色球组成,每注投注号码由6个红 ...

  3. 实例分析jdom和dom4j的使用和区别

    对于xml的解析和生成,我们在实际应用中用的比较多的是JDOM和DOM4J,下面通过例子来分析两者的区别(在这里我就不详细讲解怎么具体解析xml,如果对于xml的解析看不懂的可以先去看下我之前关于do ...

  4. C++重载流插入运算符和流提取运算符【转】

    C++的流插入运算符“<<”和流提取运算符“>>”是C++在类库中提供的,所有C++编译系统都在类库中提供输入流类istream和输出流类ostream.cin和cout分别是 ...

  5. (一)跟我一起玩Linux网络服务:DNS服务——BIND(/etc/named.conf、/var/named)设置实现和解释

    2015年3月24更新 添加了要加的配置域名解析器(否则会找不到域名)     一.创建该实验的的模型   配置完gate虚拟机的两张网卡后,就启动gate的转发 [root@localhost ro ...

  6. 【随记】修复TortoiseGit文件夹和文件状态图标不显示问题

    一. 运行环境: 操作系统 Windows 10 64bit TortoiseGit (2.2.0.0) 64bit msysgit(2.9.2.1) 64bit 注意:请确保环境正确,软件的位数相匹 ...

  7. [转] js call

    call 方法  转自: http://www.cnblogs.com/sweting/archive/2009/12/21/1629204.html调用一个对象的一个方法,以另一个对象替换当前对象. ...

  8. Python之简单的SMTP发送邮件详细教程附代码

      简介 Python发送邮件的教程本人在网站搜索的时候搜索出来了一大堆,但是都是说了一大堆原理然后就推出了实现代码,我测试用给出的代码进行发送邮件时都不成功,后面找了很久才找到原因,这都是没有一个详 ...

  9. awk基础 [马哥视频]

    awk基础 1.1 print print的使用格式: print item1,item2, …. 要点: 各项目自己使用逗号隔开,而输出时则以空白字符分隔: 输出的item可以为字符串或者数值,当前 ...

  10. iOS: 学习笔记, 值与引用类型(译自: https://developer.apple.com/swift/blog/ Aug 15, 2014 Value and Reference Types)

    值和引用类型 Value and Reference Types 在Swift中,有两种数据类型. 一是"值类型"(value type), 它是每一个实例都保存有各自的数据,通常 ...