关闭

学习笔记11-OC基本语法和构造方法

185人阅读 评论(0) 收藏 举报

1 OC传统get和set方法

2点语法

       只能使用点语法设置成员变量(get和set方法),不能访问其他方法。

       Person  *p = [Person new];

       赋值:p.name=“xiaoming”;  //(xcode优化)访问的是成员变量set方法。

       取值:int  a =p.age;           // 访问的是成员变量get方法。

注意

1) 在set和get方法中不能使用 self.age=age 设置_age 值,会不断调用自己造成死循环。和JAVA中的this指针有区别 java 中可以使用this.age=age;

2) 点语法的本质是set和get方法的调用不是访问成员变量。

3 @property

       是编译器指令,告诉编译器声明属性的访问器(声明get和set方法)。

使用

       @property 类型名 方法名(规范写法下,成员变量名去掉下划线)。

              @propertyint  age; //相当于_age 的set和get方法的声明。

       注意

1) 只能写在声明的地方 @interface 和@end之间。

2) 类型一致可以写在一起 @property int  age ,weight。

 

@property 的增强使用

       xcode 4.4 之后 只需要声明使用@property 声明 Xcode会自动实现。

       @property int  age  ;//声明的是_age的set和get方法 实现的也是_age的set和get方法。如果没有_age 会自动生成。可以被子类继承。

 

4 @synthesize

       是编译器指令,告诉编译器实现属性的访问器(实现get和set方法)。

       使用

       @synthesize  age ; //相当于实现了 声明的方法为age的get和set方法。

                     但是get和set方法操作的不是_age这个实例变量

注意

方法名必须先@property中声明。

       多个实例变量可以放在一行建议只把类型一致的写在一起。

@synthesize  age weight  name;

              指定实例变量赋值

              @synthesize  age=_age ; //默认操的是下划线的_age。

5  @propertyset和get方法的重写

              和手动实现set和get方法一样。

6 动态类型和静态类型

       动态类型:程序执行的时候才知道所属类型。

       静态类型;将一个变量定义为特定类的对象。编译的时候就知道变量的类型。

7  id类型

        NSObject 访问子类的方法。

        NSObject是所有类的基类。NSObject指针可以指向任何类对象。

        id是通用的对象类型,可以存储任何类对象,万能指针。

        使用

                     id  obj  ;

                     obj= [Person  new];

                     此时 obj 就可以调用Person  里的方法了。

                    

              NSObejct 编译时检查 调用子类方法时需要 强制转换

              id         运行时检查 不需要强制转换。

              id和insanetype

              都可以作为方法的返回类型,

              insanetype可以返回和方法类型相同类型的对象 id只能返回未知类型对象

              insanetype只能作为返回值  id还可以作为参数。

8 动态类型检测

       动态绑定;一个对象是否调用指定的方法不是编译器决定而是运行时 决定。

       动态检测:检测一个实例对象是否是某类或者某类子类的实例。

      

              BOOL is=[ ani isKingOfClass :[Animalclass]];// 

              is:返回值

              ani:实例对象

              isKingOfClass:检测方法

              [Animalclass]: 类对象

isKingOfClass 检测 ani 是否是Animal类或者子类的实例对象

isMemberOfClass  检测 ani 是否是Animal类不包括子类的实例对象

isSubClassOFClass 检测类对象是否继承类对象

       BOOL is= [Dog  isSubClassOFClass :[Animalclass]];

 

              判断对象能否响应指定方法

                     SEL  sel =@selectot(eat);  //包装eat方法

                     BOOL isRsp=[ ani respondsToSelectot:sel];//判断ani 是否可以响应eat方法

                     BOOL  isRsp=[ ani respondsToSelectot:@selector(eat)];

9 构造方法的概念

       用来初始化对象的方法。

       重写构造方法为了让对象创造出来的时候就有某些初值。构造方法是对象方法。

      

       new= alloc+init;

alloc:为对象创建空间,返回未初始化的对象

init:调用对象方法进行初始化返回对象本身。

重写 init方法

-      instancetype  init{

self=[super init] ;     //先让父类做完自己初始化。

if(self){                //判断父类是否初始化成功

       子类初始化代码;//子类成员变量赋初值

}

return self;                //返回调用者自身。

}

自定义构造方法

1) 一定是对象方法

2) 返回值一般为id类型

3) 方法名以initWith开头。

类比 NSString *str=[ NSString stringWithFormat:@””];

 

 

 

 

     


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3729次
    • 积分:193
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章存档