OC---特有语法1

特有语法1

---------------------------ASP.Net+Unity开发、.Net培训、期待与您交流!----------------------------


一、利用点语法替换set方法和get方法
   1. 方法调用 
   Student *stu = [Student new];
   [stu setAge:10];
   int age = [stu age];
   这是set和get的对象调用方法
   2、点语法
   stu.age = 10;
   int age = stu.age;
   这就是点语法,点语法的实质还是方法调用
   当使用点语法时,编译器会自动展开成相应的方法 ,即:
   stu.age = 10;
   相当于[stu setAge :10];
   3、常见错误
   - (void) setAge:(int)age {
    self.age = age;//  [self setAge : age]
   }
   - (int) age {
    return self.age;//  [self age]
    } 
  以上代码会发生死循环;
二,作用域
    局部变量、全局变量都有自己的作用域,成员变量也不例外
    @private:只能在当前类的对象方法中直接访问
    @protected:可以在当前类以及子类的对象方法中直接访问
    @public:任何地方都可以直接访问
    @package:同一个“体系内”(框架)可以访问,介于@private和@public之间
三、@property
    用在@inteface中
    用来自动生成setter和getter的声明
    用@property int age;
就可以代替下面的两行
    - (int)age;                  //getter
    -  (void)setAge:(int)newAge;  //setter
    @interface Person :NSObject
    {
       int _age;
    }
    - (int)age;  
    -  (void)setAge:(int)newAge; 
    @property int age;
    @end;
四、@synthesize
    用在@implementation中
    用来自动生成setter和getter的实现
    用@synthesize age = _age;
就可以代替 
    -(int)age{
       return _age
    }
    -(void)newAge :(int)age{
       _age = age;
    }
注意:
    @synthesize age = _age;
    setter和getter实现中会访问成员变量_age 
    如果成员变量_age不存在,就会自动生成一个@private的成员变量_age
    @synthesize age;
    setter和getter实现中会访问成员变量age 
    如果成员变量age不存在,就会自动生成一个@private的成员变量age
    手动实现
    若手动实现了setter方法,编译器就只会自动生成getter方法
    若手动实现了getter方法,编译器就只会自动生成setter方法
    若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量 
自从Xcode 4.x后,@property就独揽了@synthesize的功能。也就是说,@property可以同时生成setter和getter的声明和实现
五、id
    万能指针,能指向任何OC对象,相当于NSObject *
    id类型的定义
    typedef struct objc_object {
         Class isa;
    } *id; 
    id p = [Person new]; //注意id后不加*号;
六、对象的创建原理
   1.new的两部曲:
   1)分配内存(+alloc)
   2)初始化(-init)
   Person *p1 = [Person alloc];
   Person *p1 = [p1 init];
   合成一句后:
   Person *p = [[Person alloc] init];
   2,init方法的重写
   在对象创建完毕后,成员变量马上就有一些默认的值
    - (id)init
   {
    if (self = [super init])
    {
        _age = 10;
    }
    return self;
   } 
   3、自定义的构造方法
   构造方法的一些规范:
    返回值是id类型
    方法名都以init开头
    - (id)initWithAge:(int)age {
    if (self = [super init]) {
        _age = age;
    }
      return self;
    }
七、多文件编程
   每个类分布在不同文件中
   类的声明放在.h文件,类的实现放在.m文件
   若想使用某个类,就包含某个类的.h声明文件


---------------------------ASP.Net+Unity开发、.Net培训、期待与您交流!----------------------------

























  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值