oc 方法

作者: 小李不木 | 来源:发表于2019-06-10 12:53 被阅读0次

super 关键字:

1:可以直接调用父类的某个方法。

2:super 处在对象方法中,就会调用父类的对象方法。

3: super 处在类方法中,就会调用父类的类方法。

使用场合:

               子类重写父类的方法时想保留父类的一些行为再加上自己想要的功能。

NSString  

oc字符串也是一个对象,NSString 是oc自带的类。所有的类都要继承NSObject 这个类。

例如:

   #import  <Foundation/ Foundation.h>

  int main ()

  {

NSString  *s = "Itcast";

char  * name = "itcast ";

NSLog (@"%@,s");

NSLog (@"%,name");

  return  0;

     }

点语法

利用点语法替代set 和 get 方法。

1>: 方法调用

     Student  * s =  [ student  new ];

[ s  setAge:10  ];

 int  age  = [ s  age ];

点语法:

   s. age  = 10;

int  age = s.age;

 2: 点语法的本质

   点语法的本质还是方法调用 。  

   当使用点语法时,编译器会自动展成相应的方法。

  s  .age = 10;

  就会展开成:

 [  s  setAge : 10];

 int age  = s. age ;

展开为:

         int  age =  [ s   age ];

 死循环注意:

   - void  setAge : (int )  age 

{

self.age = age;

}

成员变量的作用域:

1:@private : 只能在当前类的实现@implemmentation 中直接访问。

如果在属性中什么都不写,就默认为@private.

2:@protected : 可以在当前类及子类的实现@implemmentation 中直接访问。

3:@public  :  任何地方都可以直接访问。

4:@package :同一个体系内可以访问,介于@private 和 @public  之间 。

它的子类也拥有同样的成员变量,但是却不能直接访问。就只能用set 和get 方法访问。

也可以在类的实现中定义成员变量,但默认为 @private 型,及时写上@ public 也没用,因为主函数所在的文件没有包含类的实现所在的文件。

在@imlementation 中定义的变量默认为 @ private 

在@interface 中定义成员变量默认为 @ protected 

 只有在类的实现与主函数在一个文件中时。可以写@public 。可以被后面的main 函数使用。

  @property  和 @ synthesize

 @property  Int age ;

可以展开为age 的 set 和 get 声明

等价于:- void setAge : int age ;

               - (int ) age;

       @ synthesize   age = - age ;

  可以展开为 age 的 set 和 get  方法的实现。

- void setAge : int age 

{

  -age= age ;

}

- (int ) age

{

return  -age;

}

  例如: 

@interface  Person  : NSObject 

            {

              int  age ;

              double  weight;

           }

         - void  test ;

            @end 

@implementation   Person 

- void  test 

NSLog (@''  调用 了人的 test 函数");

}

     @end 

可以用@property  和 @ synthesize 替代

@interface  Person  : NSObject 

              @property   int  age ;

                @property   double    weight ;

            @end 

@implementation   Person 

@ synthesize  age = -age ;

@ synthesize  weight = - weight ;

     @end 

如果在类的声明中没有定义成员变量 weight ,则@ synthesize  weight = - weight;这个语句,就会自动生成- weight这个成员变量。

id 

万能指针,能指向任何oc对象,相当于 NSObject *;

 定义为:

         typedef    struct  objc  object  

            {

               class   isa;

               }    *   id;

id 后不加*,因为它的内部包含了*。

构造方法

用来初始化对象的方法,是对象方法,以减号开头。

  person  * s = [  Person  new ];

 new 是一个类方法。只能由类名调用。

new 这个方法又包含了两个方法,可以把上面的语句分解为

 person  * s = [  [Person  alloc]    init ];

   alloc 的作用是 分配存储空间,是类方法,只能由类名调用

   init 是对象方法,作用是 初始化。

   重写init  方法

   - (id )   init 

{

    if (self = [super  init]  ) 

  -age = 10;

    return  self ;

}

  初始化分为两步:初始化父类的成员变量和属性

                                  初始化对象的成员变量和属性

init 重写:在对象创建完毕后,成员变量马上就有一些默认值。

  自定义构造方法:

    一定是对象方法,一定以减号开头。

  返回值是(id)类型。

 方法名一般以initWith 开头。

例如:

- (id )   initWith:(int)age

{

    if (self = [super  init]  ) 

  {

age = 10;

}

    return  self ;

}

创建出来的新对象默认初始值就是10.

相关文章

网友评论

      本文标题:oc 方法

      本文链接:https://www.haomeiwen.com/subject/xrfzxctx.html