OC基础—@property和@synthesize(附带新知识 新类型id)
来源:互联网 发布:三国志13荀灌娘数据 编辑:程序博客网 时间:2024/05/17 22:08
------ android培训、java培训、期待与您交流! ----------
OC基础—@property和@synthesize
@property和@synthesize:(自动建立setter和getter方法,编译器特性)
@property:可自动生成某个成员变量的setter和getter声明
这样就会使点语法失效!
@synthesize:自动生成setter和getter的实现
举个例子:建立一个Person类
.h文件
#import <Foundation/Foundation.h>@interface Person : NSObject{ int _age;}// @property 可以自动实现Getter方法与setter方法的实现@property int age;/*上面的@property int age;就自动生成下面的方法- (void)setAge:(int)age;- (int)age;*/@end.m文件
#import "Person.h"@implementation Person@synthesize age = _age;// 帮助我们自动建立Getter与setter进行实现,并且会访问_age 这个成员变量/*上面的@synthesize age = _age; 自动生成下面代码 - (void)setAge:(int)age { _age = age; } - (int)age { return _age; } */@end
@property和@synthesize在.h .m文件中是相互对应的。
在Xcode4.4之后出现了最简单形式:
举了例子,建立一个Car类
.h文件
#import <Foundation/Foundation.h>@interface Car : NSObject{ //int _speed; //int _wheels;}@property int speed, wheels;// 验证- (void)test;@end.m文件
#import "Car.h"@implementation Car// 这个会访问_speed和_wheels成员变量,如果不存在,就会自动生成@privata类型的_speed和_wheels变量// 最简形式 什么都不用写 @property完全实现 Xcode4.4才可以实现// 测试自动生成变量- (void)test{ NSLog(@"速度=%d", _speed);}@end从上面看到,只要在@interface里面加一句@property int age;那么什么成员变量_age,什么setter和getter都不用写,这句话自动添加。
@property int age; 会自动生成@protected的成员变量,而且成员变量名为_age,就像int _age;
@property int age;会自动生成setter和getter声明,甚至可以代替@synthesize,在.m文件中自动生成setter和getter的实现,也就是@implementation里面不用写setter和getter方法。
以上的前提是,成员变量和setter与getter都是自动生成的我们没有自己写,但是如果我们自己写了,那么@property int age;在执行的时候,会先检测你的文件中是否存在成员变量和setter与getter,如果存在,那么就不会自动生成已经存在的变量或方法,如果不存在,那么生成不存在的方法或变量
如果@interface里存在成员变量int age;那么@property int age;会直接访问age; 而不是生产成_age。他会检测与自己同名的成员变量
新类型id(万能指针)
id(万能指针,可以操作任何id对象) :
id 可以认为是 NSObject *
id类型的定义:
typedef struct objc_object{
Class isa;
} *id;
所以id后面不要加*
举个例子:Person类
.h文件(@property就是好用)
#import <Foundation/Foundation.h>@interface Persen : NSObject@property int age;@property id obj;@end.m文件就什么都不用写了
main函数
#import <Foundation/Foundation.h>#import "Persen.h"int main( ){ //Person *p = [Person new]; // id是一种类型 万能指针 能指向/操作任何OC对象 只适用于OC对象 id d = [Persen new]; [d setAge:10]; NSLog(@"%d", [d age]); [d setObj:@"asdfsadf"]; // id == NSObject * //NSObject *o = [Person new]; return 0;}使用id就像是多态,多以有多态的好处
------ android培训、java培训、期待与您交流! ----------
0 0
- OC基础—@property和@synthesize(附带新知识 新类型id)
- 黑马程序员——OC基础——@property、@synthesize和id类型
- OC语言@property @synthesize和id
- OC中的@property、@synthesize和id
- OC语言@property @synthesize和id
- OC语言@property @synthesize和id
- OC语言@property @synthesize和id
- OC语言@property @synthesize和id
- OC语言@property @synthesize和id
- OC语言@property @synthesize和id
- 19.OC语言@property @synthesize和id
- OC语言@property @synthesize和id
- OC语言9-@property @synthesize和id
- OC基础—内存管理之@property及其参数(补充新知识:循环引用和@class)
- 黑马程序员------OC基础-----@property和@synthesize
- OC基础第四章:@property和@synthesize
- OC基础-@property,@synthesize和@dynamic 16
- OC中的点语法,成员变量,@property和@synthesize:id类型,构造函数
- Java四种线程池的使用
- android素材
- QQ5.5绿色版下载|无广告 无弹窗 免体验资格
- 面向对象基础实验-Box类
- 用终端写C程序 vi 命令
- OC基础—@property和@synthesize(附带新知识 新类型id)
- LTE学习笔记5之物理信道与信号
- 关于layerfsd的实现与思路
- dirname(__FILE__);
- windows 控制台下运行cl命令
- 使用Maven创建项目
- Android开发之Http通信HttpURLConnection接口
- 网络扫描软件试用体验
- Python中函数式编程