您的位置:首页 > 职场人生

黑马程序员—IOS加强视频—@property

2015-08-21 14:06 309 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

@property是编译器指令,告诉编译器声明属性的访问器(getter和setter)方法;

免去手工写get和set方法

@property的使用:(仅仅是帮我们做了声明,没有做实现,需要手动实现)

1)        使用格式

@property  数据类型  方法名(去掉set)

    @property  int  age;//千万别写成 _age ,要不自动帮我们声明的方法名都会变。

2)        作用:

在Xcode4.4之前,用于帮我们实现get/set方法的声明

在Xcode4.4之后,有增强功能

注意事项:

1)        一定要写在@interface和@end之间

2)        一定要规范写方法名

@synthesize帮我们实现了成员变量的get和set方法

@synthesize age;//帮我们生成了一个变量age  !!!

替代:

-(void)setAge:(int) age{

                Self->age=age;

}

-(int)age{

        Return  age;

}

考点:在这里是重新生成的成员变量的值,和定义的成员变量不一样,当我们在打印成员变量值时,还是为空的状态。

注意:

方法名一定要 在.h中使用 @property  数据类型  方法名;不能单独写新的 

@synthesize指定实例变量赋值:(不像上面一样帮我们重新生成两个新的变量,这样容易出错)

在类型一致的情况下,可以@property int age,weight;@synthesize int age,weight;

指定实例变量的@synthesize  age=_age,weight=_weight;(在实现的时候,不同类型的变量也能写在一起)!!

@property增强使用

在Xcode4.4之后,可以只使用@property而不使用@synthesize,完成成员变量_age  的声明和实现.

操作的对象是带有下划线的成员变量

如果我们的当前类,没有下划线的实例变量,系统会帮我们生成(但是生成的变量是私有变量不能被继承)

在增强模式下,如果同时只能重写get或set一个方法如果两个都重写了,系统就会报错(因为此时@property多余了,白给你自动生成了。)

如果真的想重写,需要在加上@synthesize,这样就表示不使用增强模式,可以重写

所有类都继承与NSObject类,所以NSObject类的对象在强制类型转换之后可以使用任何类的对象方法。<
9a01
br />
NSObject *obj=[Animal  new];
[(Animal *)obj  run];

在特性声明的时候,可以添加以下关键字,告诉编译器如何实现setter和getter方法。

assign //简单赋值,主要用于基本数据类型

copy //创建一个新的对象,新的对象和旧对象是独立的两个对象

retain //将对象计数器加1

readonly //表示只读属性  只会生成getter方法 不会生成setter方法

readwrite //默认值,表求生成setter和getter方法

nonatomic //非原子访问,不加同步 ,多线程并发访问提高性能 (对多线程的保护,防止在未写完,被另一个线程读取,造成数据错误)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: