• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Objective-C点语法成员变量的作用域@property和@synthesize关键字id类型 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

点语法

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

方法调用

Student *stu = [Student new];

[stu setAge : 18];

int age = [stu age];

点语法

stu.age = 18;

int age = stu.age;

2.点语法的本质

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

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

3.死循环注意

- (void) setAge : (int) age {
    self.age = age;//会引起死循环
}

- (int) age {
    return self.age;//会引起死循环
}

成员变量的作用域

@private: 只能在当前类的对象方法中直接访问

@protected: 可以在当前类及子类的对象方法中直接访问

@public: 任何地方都可以直接访问

@package: 同一个'体系内'(框架)可以访问 介于@private和@public之间

@property和@synthesize关键字

1.@property用在@interface中 用来自动生成set和get的声明

#import <Foundation/Foundation.h

@interface Person : NSObject {
    int _age;
}
//- (void) setAge : (int) age;
//- (int) age;
@property int age;//一定不能带_ 注意我的命名规范
@end 

2.@synthesize用在@implementation中 用来自动生成set和get的实现

@implementation Person
//- (void) setAge : (int) age {
//    _age = age;
//}
//- (int) age {
//    return _age;
//}
@synthesize age = _age;//注意我的命名规范
@end

3.@synthesize的细节

A: @synthesize age = _age;

set和get实现中会访问成员变量_age 如果成员变量_age不存在 就会自动生成一个@private的成员变量_age

B: @synthesize age;

set和get实现中会访问成员变量age 如果成员变量age不存在 就会自动生成一个@private的成员变量age

C: 手动实现

若手动实现了set方法 编译器就只会自动生成get方法

若手动实现了get方法 编译器就只会自动生成set方法

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

4.@property 新特性

自从Xcode4.x后 @property就独揽了@synthesize的功能 也就是说 @property可以同时生成set和get的声明和实现

默认情况下 set和get方法中的实现 回去访问下划线'_'开头的成员变量

id类型

1.简介

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

2.使用

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

3.局限性

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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap