码迷,mamicode.com
首页 > 其他好文 > 详细

04-OC特有语法01

时间:2015-09-12 10:41:52      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

一、注释

#pragma mark - 内容

作用:在Xcode中可以方便定位到该方法的存在

二、点语法

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

* 方法调用

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

* 点语法

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

2. 点语法的本质

* 其实点语法的本质还是方法调用

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

技术分享

三、成员变量的作用域

1. 基本概念

局部变量、全局变量都有自己的作用域,成员变量也不例外

2. 类型

@public : 在任何地方都能直接访问对象的成员变量

@private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private

@protected : 可以在当前类及其子类的对象方法中直接访问  @interface中默认就是@protected

@package : 只要处在同一个框架中,就能直接访问对象的成员变量

@interface@implementation中不能声明同名的成员变量

3. @implementation补充

没有@interface,只有@implementation,也可以开发一个类

四、@property@synthesize

1. @property

* 用在@inteface

* 用来自动生成settergetter的声明

* @property int age;就可以代替下面的两行

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

* 示例

技术分享

2. @synthesize

* 用在@implementation

* 用来自动生成settergetter的实现

* @synthesize age = _age;就可以代替

- (int)age{
    return _age;
}

- (void)setAge:(int)age{
    _age = age;
}

? 示例

技术分享

3. @synthesize的细节

1> @synthesize age = _age;

* settergetter实现中会访问成员变量_age

* 如果成员变量_age不存在,就会自动生成一个@private的成员变量_age

2> @synthesize age;

* settergetter实现中会访问成员变量age

* 如果成员变量age不存在,就会自动生成一个@private的成员变量age

3> 手动实现

* 若手动实现了setter方法,编译器就只会自动生成getter方法

* 若手动实现了getter方法,编译器就只会自动生成setter方法

* 若同时手动实现了settergetter方法,编译器就不会自动生成不存在的成员变量

4. @property新特性

* Xcode4.x后,@property可以同时生成settergetter的申明和实现

* 默认情况下,settergetter方法中的实现,会去访问下划线 _ 开头的成员变量

五、id

1. 简介

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

2. 使用

// 注意:id后面不要加上*
id p = [Person new];

3. 局限性

调用一个不存在的方法,编译器会马上出错

六、构造方法

1. 对象创建原理

Person *p = [Person new]; // --> alloc + init

            || // 与下面两句相等的

Person *p = [Person alloc]; // 分配内存
Person *p = [p init]; // 初始化

可以写成下面这样

Person *p = [Person alloc] init];

2. init方法的重写

* 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;
}

* 传递多个参数进行初始化

- (id)initWithAge:(int)age andNo:(int)no;

七、.h.m文件的抽取

* 每个类分布在不同文件中

* 类的声明放在.h文件,类的实现放在.m文件

* 若想使用某个类,就包含某个类的.h声明文件

04-OC特有语法01

标签:

原文地址:http://www.cnblogs.com/wayung7/p/4802580.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!