黑马程序员--IOS学习日记:06--OC的核心语法

来源:互联网 发布:照片动态制作软件 编辑:程序博客网 时间:2024/05/17 04:29

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、点语法

 1.点语法的本质是方法调用 

如 p.age = 10;  编译器会自动生成 [p setAge: 10];

注: 1.点语法是用来调用set和get方法的

2.点语法的本质是方法调用

3.编译器会自动分析,将点语法转换成与之对应的set和get方法


二、id类型

 1.id类型是通用指针类型,即万能指针,但不能在其前加上*

 2.id能指向OC中的任何对象,所以返回id类型值的方法只是返回指向内存中某对象的指针


三、成员变量的作用域

 1.@private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private)

 2.@protected : 可以在当前类及其子类的对象方法中直接访问  (@interface中默认就是@protected)

 3.@package : 只要处在同一个框架中,就能直接访问对象的成员变量

 4.@interface和@implementation中不能声明同名的成员变量ormSelector:@selector(test)];


四、@property和synthesize

 1. @property用在@interface中,会自动生成某个成员变量的set 和get方法的声明和实现

 2.@synthesize用在@implementation中,会自动生成某个成员变量的set和get方法的实现

例如

@interface Person : NSObject  {      int _age;      // int age;            int _height;            double _weight;            NSString *_name;  }    // @property:可以自动生成某个成员变量的setter和getter声明  @property int age;  //- (void)setAge:(int)age;  //- (int)age;      @property int height;  //- (void)setHeight:(int)height;  //- (int)height;    - (void)test;      @property double weight;    @property NSString *name;    @end    @implementation Person    // @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量  @synthesize age = _age;    @synthesize height = _height;    @synthesize weight = _weight, name = _name;    @end  

 3. 1>写了@property,若自己定义了set方法,编译器只会生成get方法和成员变量

     2>写了@property,若自己定义了get方法,编译器只会生成set方法和成员变量

     3>写了@property,若自己定义了set和get方法,编译器就不会生成不存在的成员变量 


四、构造方法

1. Person *p=[Person new];  //完整的创建一个可用的对象

    1>分配存储空间(+alloc方法)

    2>初始化      (- init方法)

     new方法做的事情

    1>调用+alloc方法,分配存储空间   Person *p1=[Person alloc];

    2>调用- init 方法,进行初始化(初始化完毕,默认为0)Person *p2=[p1 init];

         Person *p=[Person new]; 就相当于Person *p3=[ [ Person alloc ] init ];

2. init 就是构造方法

3. 任何对象构造之前首先要调用父类的构造方法(init)

4. 若想某个对象一创建出来,它的成员变量就是某个值(10),就重写构造方法(重写init)

-(id)init       {           if(self=[super init])   //先调回super的init方法,如果对象初始化成功         {                _age=10           //赋值         }        return self;       //返回初始化完毕的对象       }  

5. 重写构造方法的步骤:(1)调用父类的构造方法,初始化父类([super init])

                       (2)在进行子类内部成员变量的初始化

6. 自定义构造方法

      规范:1>一定是对象方法,以 - 开头

                 2>返回值一般都是id类型

                 3>方法名一般以initwith开头

-(id)initwithName:(NSString*)name      {           if(self=[super init])   //先调回super的init方法,如果对象初始化成功        {               _name=name;     //赋值        }       return self;       //返回初始化完毕的对象      }  

五、.h文件和.m文件的分工

  1.#import指令用于引入.h头文件

  2. .h文件用于类的声明,.m文件用于类的实现

  3.如果一个类中用到其他类,只需要引入其他类的声明即可


六、Category(分类:给类扩充一些方法)

1. 格式

      分类的声明:@interface   类名

           @end

      分类的实现:@implementation  类名

    @end

2. 作用:不改变原来类的内容的基础上为类增加一些新的方法

3. 注意点:

    1>分类只能增加方法,不能增加成员变量

    2>分类的实现里面可以增加成员变量

    3>分类可是重新实现原来类中的方法,但是会覆盖原来的方法,导致原来的方法不可再用

    4>分类方法优先去分类中找,然后再去原来的类中找,最后再去父类中找(优先级:分类->原来类->父类)


六、description方法

1.  默认情况下,利用NSLog和%@输出对象时,结果是<类名:对象地址>

2. 利用NSLog和%@输出对象时,会调用对象的-description方法,description方法的返回值是(NSString*)

3. 若想将对象的属性值(age=10,name="jack")打印出来,可以重写description方法

     -(NSString *)description

    {

      return [ NSString stringwithFormat : @"age is %d , name=%@" , _age , _name ];

    }

注意点:不能在-description方法中使用NSLog打印self(死循环)


七、SEL

SEL其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址。找到方法地址就可以调用方法。其实消息就是SEL。


0 0