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

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值