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