黑马程序员_ios基础总结9_OC特有语法

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

利用点语法替换set方法和get方法

1.1方法调用

Student *stu = [Student new];
[stu setAge:100];
int age = [stu age];

1.2点语法

stu.age=100;
int age = stu.age;

1.3点语法的本质

其实点语法的本质还是方法调用
当使用点语法时,编译器会自动展开成相应的方法


1.4典型的错误

- (void) setAge:(int)age {
    // 下面的代码会引发死循环
    self.age = age;
}
- (int) age {
    // 下面的代码会引发死循环
    return self.age;
} 

类型

@private:只能在当前类的对象方法中直接访问
@protected:可以在当前类以及子类的对象方法中直接访问
@public:任何地方都可以直接访问
@package:同一个“体系内”(框架)可以访问,介于@private和@public之间

属性

3.1@property

3.1.1用在@inteface中

用来自动生成setter和getter的声明
用@propertyintage;就可以代替下面的两行

- (int)age;   // getter

- (void)setAge:(int)age;  // setter


3.2@synthesize

3.2.1用在@implementation中

用来自动生成setter和getter的实现
用@synthesizeage = _age;就可以代替

- (int)age{

  return_age;

}

- (void)setAge:(int)age{

  _age= age;

}

3.2.2@synthesize的细节

@synthesize age = _age;
setter和getter实现中会访问成员变量_age
如果成员变量_age不存在,就会自动生成一个@private的成员变量_age
@synthesize age;
setter和getter实现中会访问成员变量age
如果成员变量age不存在,就会自动生成一个@private的成员变量age
手动实现
若手动实现了setter方法,编译器就只会自动生成getter方法
若手动实现了getter方法,编译器就只会自动生成setter方法
若同时手动实现了setter和getter方法,编译器就不会自动生成不存在的成员变量

3.2.3@property新特性

自从Xcode 4.x后,@property就独揽了@synthesize的功能。也就是说,@property可以同时生成setter和getter的声明和实现
默认情况下,setter和getter方法中的实现,会去访问下划线 _ 开头的成员变量

分类

4.1格式

分类的声明
@interface 类名 (分类名称)
//方法声明
@end
分类的实现
@implemention 类名 (分类名称)
//方法实现
@end

4.2好处

一个庞大的类可以分模块开发
一个庞大的类可以由多个人来编写,更有利于团队合作

4.3使用注意

1>Category可以访问原始类的实例变量,但不能添加变量,只能添加方法。如果想添加变量,可以考虑通过继承创建子类
2>Category可以实现原始类的方法,但不推荐这么做,因为它是直接替换掉原来的方法,这么做的后果是再也不能访问原来的方法
3>多个Category中如果实现了相同的方法,只有最后一个参与编译的才会有效














---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值