黑马程序员-----@property和@synthesize

来源:互联网 发布:北 north plus新域名 编辑:程序博客网 时间:2024/05/19 02:41

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------

@property和@synthesize

// Student.h

// @property

//

// Created by adh on 14-7-21.

// Copyright (c) 2014年 adh. All rights reserved.

//

1、@property

@property int age;

@property int no;

@property (retain) *Book book;

@property (nonatomic,retain) *Book book;

@property (nonatomic,getter = isBook) BOOLisRich;

1>@property只用于申明

2>当编译器遇到@property会自动展开成setter和getter方法的申明

3>参数说明

 retain:只用于OC对象,自动生成带内存管理的setter方法,先release原来值,再retain现在的值getter方法不需要管理内存

 assgin:基本数据类型,默认参数

 readonly:只读属性,即只生成getter方法不生成setter方法

 readwrite:默认,即生成setter和getter方法

 nonatomic/atomic:原子性,提供多线程策略,atomic相当于给方法枷锁,默认atomic;nonatomic即不考了线程安全问题;在iPhone开发中我们的内存是恨有限的,一般为了提高性能,基本上不使用atomic而是使用nonatomic

 copy:setter先release旧值,在copy新值

 getter:用来制定getter方法的方法名

 

2、@synthesize

@synthesize age;

@synthesize no;

@synthesize age,no;

@synthesize age = _age;

1>@synthesize只用于.m文件的

2>当编译器遇到@synthesize会自动展开成setter和getter方法的实现

3>@synthesize自动访问与age同名的变量,如果没有找到同名变量,会自动生成一个私有的age同名变量,所以有了@property可以直接省略.h文件当中的变量的申明,让编译器自动申明

4>@synthesize age = _age;代表setter和getter会自_age变量

5>如果我们没有实现setter或者getter方法,synthesize会自动生成缺少的标准的setter或者getter方法,当然如果setter和getter方法都没有实现synthesize会自动生成标准的setter和getter方法

 

4、新特性

1>在Xcode4.5级以上的环境下,当编译器遇到@property就会自动在.h文件当中实现@synthesize,而不需要手动添加,并且默认去访问_age成员变量

2>如果找不到_age的变量申明,则编译器自动生成一个私有的_age成员变量



---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
0 0