一、枚举 结构体

typedef enum{

sexMan,

sexWoman

}Sex;

 
tydedef struct{
   int year;
   int month;
   int day;
}Date;
 
二、类方法有参数声明
- (void)pingFang:(int)num;
一个参数对应一个冒号
 
三、封装
set方法(对参数进行过滤)
1、作用:提供一个方法给外界设置成员变量值。
2、命名规范:
  ①、方法名必须以set开头。
  ②、set后面跟上成员变量的名称,成员变量的首字母必须大写。
  ③、返回值一定void。
  ④、一定接收一个参数,而且参数类型跟成员变量类型一致。
  ⑤、形参名称不能跟成员变量名一致。
 
get方法
1、作用:返回对象内部的成员变量。
2、命名规范:
  ①、肯定有返回值,返回值类型肯定与成员变量一致。
  ②、方法名跟成员变量一样。
  ③、不需要接收任何参数。
 
 
成员变量命名规范:要以下划线开头。
作用:1、让成员变量和get方法的名称区分开。
        2、可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量。
 
四、类方法
1、类方法不能访问成员变量
2、不依赖于对象,执行效率高
3、能用类方法,尽量用类方法
4、场合:当方法内部不需要使用到成员变量时,就可以改为类方法
 
五、self:指向方向调用者
self->age 访问当前对象的age
 
self的用途:
1、谁调用了当前方法,self就代表谁
  ①、self出现在对象方法中,self就代表对象方法。
  ②、self出现类方法中,self就代表类方法。
2、在对象方法利用“self->成员变量名”访问当前对象内部的成员变量。
3、[self 方法名]可以调用其他对象/类方法。
 
六、super(直接调用父类的方法)如:[super walk];
作用:
1、直接调用父类中的某个方法。
2、super处在对象方法中,那么就会调用父类的对象方法;super处在类方法中,那么就会调用父类的类方法。
3、使用场合:子类重写父类方法时,想保留父类的一些行为。
 
七、多态
多态的局限性:父类类型的变量不能用来调用子类的方法。
错误示范:
      Animal *a = [Doy new];
     [a run]; 报错
解决方法:
    Doy *d = (Doy *)a;//强转为子类
    [d run];
 
注意:
1、没有继承就没有多态。
2、代码的体现:父类类型的指针指向子类的对象。
3、好处:如果函数/方法参数中使用的是父类类型,可以传入父类,子类对象。
void feed (Animal *a)//a可以传入父类,也可以是子类对象
{ [a eat]; }
 
八、声明变量
@property int age;//可以系统自动生成某个成员变量的get和set的声明
注意:当自定义getter和setter方法,系统不会实现生成_age变量。
 
九、万能指针id
id d;//能指向/操作任何oc对象,相当于NSObject *。
tepedef struct objc_object{
    class isa;
}*id;
 
 
十、category分类:
分类名称:类名+模块
使用注意:1、分类只能增加方法,不能增加成员变量。
              2、分类方法实现中可以访问原来类中声明的成员变量。
              3、优先去分类中查找方法,然后再去原来类中找到,最后去父类中找。
              4、分类可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用。
              5、多个分类,最后参与编译的分类优先。(点项目 -> Build phases -> complile sources)
              6、如果想添加变量,可以考虑通过继承创建子类。
 
十一、一些类函数调用时机
当程序启动的时候,就会加载一次项目所有的类。
 
//1、在类被加载完毕的时候调用load
+ (void)load
{
    NSlog(@"调用了test方法");
}
 
//2、当第一次使用这个类的时候,就会调用一次 + initialize方法。
+ (void)initialize
{
    NSlog(@"调用了initalize");
}
 
//有分类时,调用person类,分类initialize覆盖person
//先加载父类再加载子类,先加载原始类再加载分类
 
//3、决定实例对象的输出结果
打印对象NSLog(@"%@",p);
- (NSString *)description
{
}
 
①、默认情况下,利用NSlog和%@输出对象时,结果是:<类名:内存地址>
②、会调用对象P的-description方法
③、拿到-description方法的返回值(NSString *)显示在屏幕上。
④、-description方法默认返回的是“类名+内存地址”
⑤、在-description内调用NSLog(@"%@",self);会引起死循环
 
+ description //决定了类对相当输出结果
 
十二、 SEL
1、方法的存储位置
①、每个类的方法列表都存储在类对象中
②、每个方法都有一个与之对应的SEL类型的对象
③、根据一个SEL对象就可以找到方法的地址,进而调用方法
④、SEL类型的定义:typedef struct objc_selector  *SEL;
 
2、SEL对象的创建
SEL s = @selector(test); [p performSelector:s];
SEL s2 = NSSelectoFromString(@"test");
 
3、_cmd代表当前方法
每个方法里面都有一个_cmd
//也会引起死循环:[self performSelector:_cmd];
 
4、SEL其实是对方法的一种包装,将方法包装成一个SEL类型的类型,去找对应的方法地址。找到方法地址就可以调用方法。
 
 
十三、内存管理
1、对象的基础结构:
每个oc对象都有自己的引用计数器,是一个整数,表示“对象被引用的次数”,即有多少人正在使用这个oc对象,当引用计数器为0时,对象占用的内存被系统回收。
 
2、给对象发送一条消息:
retain,引用计数器+1,返回的是对象本身。
release,引用计数器-1。
retainlout,获得当前引用计数器值。
 
3、对象销毁
①、当一个对象被销毁时,系统会自动向对象发送一条dealloc消息。
②、一般会重写dealloc方法,在这里释放相关资源,dealloc就像对象的遗言。
③、一旦重写dealloc方法就必须调用[super dealloc],并且放在最后面调用
④、不要直接调用dealloc方法
⑤、一旦对象被回收了,它占用的内存就不再可用,坚持使用会导致程序奔溃,野指针错误。(野指针:指向僵尸对象的指针)
EXC_BAD_ACCESS(野指针错误):访问了一块坏的内存(已经被回收,已不可用的内存)
野指针错误的解决方法:让指针p=nil;
 
十四、内存管理规范
1、只要调用alloc,必须有realease(autorelease)
2、set方法的代码规范:
①、基础数据类型:直接复制
- (void)setAge:(int)age
{
    _age = age;
}
 
②、oc对象类型
- (void)setCar:(Car *)car
{
    //1、先判断是不是新传进来的对象
    if(car != _car)
    {
          //2、对旧对象做一次release
          [_car release];
        
         //3、对新对象做一次retain
         _car = [car retain];
    }
}
当用@property int age;需要自定义setter和getter。
当自定义setter和getter方法,就不会生成_age变量。
 
3、dealloc方法的代码规范
①、一定要[super dealloc],而且放到最后。
②、对self(当前)所拥有的其他对象做一次release
 
- (void)dealloc
{
  [_car release];//被retain过的属性,必须在dealloc方法中release属性
  [super dealloc];
}
 
十五、@property的参数
1、set方法内存相关的参数
①、retain:release旧值,retain新值(适用于oc对象类型)
②、assign:直接赋值(默认,适用于非oc对象类型)
③、copy:release旧值,copy新值
 
 2、是否要生成set方法
①、readwrite:同时生成setter和getter的声明、实现(默认)。
②、readonly:只会生成getter的实现、声明。
 
3、多线程管理
①、nonatomic:性能高,不生成多线程线管代码(一般要选用这个)
②、atomic:性能低(默认)
 
4、setter和getter方法的名称
①、setter决定了set方法的名称,后面要加冒号:
②、getter决定了get方法的名称(一般用在bool类型)
 
@property (nonatomic,assign,setter = abc:,getter = cd)int height;
 
5、指针
①、强指针strong
②、弱指针weak
 
十六、循环引用
1、开发中引用一个类的规范
①、在.h文件中用@class来声明类
②、在.m文件中用#import来包含类的所有内容
 
2、当两端循环retain,即A对象retain B对象,B对象retain A对象,导致A,B对象永远无法释放
解决方案:一端用retain,一端用assign
 
十七、自动释放池autorelease
atorelease会将对象放到一个自动释放池中,当自动释放池被销毁时,会对池子里面的所有对象做一次release操作
 
int main()
{
 
@autoreleasepool{
       //开始代表创建了释放池
person *p = [[[person alloc] init]autorelease];
p.age = 10;
 
 }//结束代表销毁释放池
 
 
return 0;
}
 
 
 注意:占用内存较大的对象
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

oc 基础知识的更多相关文章

  1. iOS 阶段学习第11天笔记(OC基础知识)

    iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import  用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...

  2. 开启Objective-C --- OC基础知识

    一.Objective-C简述      Objective-C通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言.Objective-C主要用于:编写iOS操作 ...

  3. OC - 2.OC基础知识介绍

    一.基础语法 1> OC语言和C语言 C语言是面向过程的语言,OC语言是面向对象的语言 OC语言继承了C语言,并增加了面向对象的思想 以下内容只介绍OC语言与C语言的不同之处 2> 关键字 ...

  4. IOS开发复习笔记(1)-OC基础知识

    在上班之余学习IOS已经有三个多月了,因为基础有些薄弱从OC的基本语法开始学习的,相继看了青柚子和红柚子的书,现在在看编程实战,趁这个机会好好的总结一下: 1.命名约定 对象类型和名称一致,以免混淆 ...

  5. oc基础知识

    只在@interface中定义变量的话,你所定义的变量只能在当前的类中访问,在其他类中是访问不了的:而用@property声明的变量可以在外部访问. 用了@property去声明的变量,可以使用“se ...

  6. OC基础知识总结 分类: ios学习 OC 2015-06-26 17:58 58人阅读 评论(0) 收藏

    //OC: Objective-C, 面向对象的C语言 //OC与C的区别 //1.OC是C的超集, C语言的所有语法都可以在OC中使用 //2.OC是面向对象 //3.OC是一门运行时语言 //4. ...

  7. OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  8. 李洪强iOS开发之OC语言基础知识

    OC语言基础知识 一.面向对象 OC语言是面向对象的,c语言是面向过程的,面向对象和面向过程只是解决问题的两种思考方式,面向过程关注的是解决问题涉及的步骤,面向对象关注的是设计能够实现解决问题所需功能 ...

  9. IOS学习之路--OC的基础知识

    1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...

随机推荐

  1. unigui多页签UI框架

    procedure TMainForm.openForm(Caption, FormClassName: string);var i: integer; sheet: TUniTabSheet;beg ...

  2. 5A的肖特基二极管 SK5x / SK5xx

    5A的肖特基 管压降经实测2A/0.3V, SK5x 和SK5xx别在于前者是四位命名,后者是一个五位命名带B, 封装不一样,参数基本一致.不细看手册容易用错了. 四位命名:封装为SMC (DO-21 ...

  3. MongoDB让人恶心的配置

    dbpath.logpath必须指定到硬盘的根目录: dbpath=D:\data\dblogpath=D:\data\log\Mongodb.log 不然启动时会报没有设置dbpath的错误

  4. BootStrap最常用的几个插件(V3.3.0版)

    1.标签页 <!-- Nav tabs --> <ul class="nav nav-tabs" role="tablist"> < ...

  5. 空循环比较 for foreach array_map array_walk

    申请一个数组,然后不断的跑空循环,看看执行时间 for循环 foreach (不使用键) foreach(使用键) array_map array_walk 查看效率速度发现很明显 是foreach更 ...

  6. Android 添加、移除和判断 桌面快捷方式图标

    思路: Launcher为了应用程序能够定制自己的快捷图标,就注册了一个 BroadcastReceiver 专门接收其他应用程序发来的快捷图标定制信息.所以只需要根据该 BroadcastRecei ...

  7. NSTimer运行机制和线程问题

    A.首先要理解NSTimer运行机制和Runloop之间的关系: 1.IOS的Run Loops机制 Run Loops是线程的基础部份,任何线程,包括主结程,都包含了一个run loop对象,Coc ...

  8. CSDN首页> 移动开发 直接拿来用!最火的Android开源项目(完结篇)

    此前,CSDN移动频道推出的GitHub平台上“最受欢迎的开源项目”系列文章引发了许多读者的热议,在“直接拿来用!最火的Android开源项目”系列文章(一).(二)中,我们也相继盘点了40个GitH ...

  9. centos上安装jdk环境

    老沙采用的环境是centos 6.5 64位服务器.在linux上安装jdk环境都很多中方式,这里讲解下手工进行安装并进行环境变量配置. 首先需要下载一个64位版本的linux,可以去oracle官网 ...

  10. 经常使用的webservice接口

    Web Service 一些对外公开的网络服务接口 2011-10-29 14:12 商业和贸易: 1.股票行情数据 WEB 服务(支持香港.深圳.上海基金.债券和股票:支持多股票同一时候查询) En ...