1、@property int age;
在编译器情况下会自动编译展开为:
<age在setter中首字母大写,点语法为p.age>
- (void)setAge:(int)age;
- (int)age;
 
2、同理:@property int _age;
在编译器情况下会自动编译展开为:
<_age在setter中首字母大写,为横线,大写仍保持,此时点语法为p._age>
- (void)set_age:(int)age;
- (int)_age;
一般情况,使用1,而不使用2.

@synthesize age = _age;
会访问_age这个成员变量,如果_age成员变量不存在,系统就会自动生成@private类型的_age的成员变量,并自动生成age的setter与getter

在4.5版本之后,可以省略@synthesize,此时,
@property int age;有三个作用
1、生成setter与getter的声明
2、生成_age的成员变量
3、生成setter与getter的实现

//注意:必须在非ARC下,在“项目——》building setting——》all——》objcet-C Automic Reference Counting
//@property(nonatomic,retain) NSString *name相当于:
- (void)setName:(NSString *)name
{
    if (_name != name)
    {
        [_name release];
        _name = [name retain
];
    }
}
否则,无法操作 [_name release];
        _name = [name retain
];


// @property:可以自动生成某个成员变量的setter和getter声明
@property int age;
//- (void)setAge:(int)age;
//- (int)age;

@property int height;
//- (void)setHeight:(int)height;
//- (int)height;


可以简写为:@property int age, height;
 
注意:生成的是age、height而不是_age、_height成员变量
 
 
语义设置(assign、retain、copy) 
基本数据类型用assign;NSString用copy、(retain也可以使用);非NSString对象用过retain
 
例:
@property(nonatomic,assign)int age;
@property(nonatomic,copy)NSString *name;
@property(nonatomic,retain)NSString *number;
@property(nonatomic,retain)NSArray *group;

@synthesize age = _age;
// @synthesize自动生成age的setter和getter实现,并且会访问_age这个成员变量,4.4后自动生成。
 
#import <Foundation/Foundation.h>
@interface Car : NSObject
{
    //int _speed;
    //int _wheels;
}
@property int speed;
@property int wheels;

//@property int speed, wheels;
- (void)test;
@end

 
#import "Car.h"

@implementation Car
//@synthesize speed = _speed, wheels = _wheels;
// 注意:会访问_speed这个成员变量,如果不存在,就会自动生成@private类型的_speed变量
@synthesize speed = _speed;
@synthesize wheels = _wheels;

- (void)test
{
    NSLog(@"速度=%d", _speed);
}

@end

 
同理:
@synthesize age;
// 默认会访问age这个成员变量,如果没有age,就会自动生成@private类型的age变量

@property int age;
如果.m中有setter或getter,系统会生成成员变量以及getter或setter。若既存在setter又存在getter,则不再会产生getter、setter以及成员变量,因为成员变量是为setter与getter服务的。此时(三无),@synthesize age = _age;无法省略。

id等价于NSObject*,万能指针,能指向或操作任何OC对象

property、synthesize、id的更多相关文章

  1. IOS 关键字self,super,copy, retain, assign , readonly , readwrite, nonatomic、 @synthesize、@property、@dynamic

    IOS 关键字self,super,copy, retain, assign , readonly , readwrite, nonatomic.                     @synth ...

  2. iOS 内存管理-copy、 retain、 assign 、readonly 、 readwrite、nonatomic、@property、@synthesize、@dynamic、IB_DESIGNABLE 、 IBInspectable、IBOutletCollection

    浅谈iOS内存管理机制 alloc,retain,copy,release,autorelease 1)使用@property配合@synthesize可以让编译器自动实现getter/setter方 ...

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

    点语法 1.利用点语法替换set方法和get方法 方法调用 Student *stu = [Student new]; [stu setAge : 18]; int age = [stu age]; ...

  4. OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法

    一. 分类-Category 1. 基本用途:Category  分类是OC特有的语言,依赖于类. ➢ 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Categor ...

  5. @property、@synthesize和dynamic的用法

    原文:  http://blog.csdn.net/hherima/article/details/8622948 @代表“Objective-C”的标志,证明您正在使用Objective-C语言 O ...

  6. ios中点语法、property跟synthesize用法

    一:OC中得点语法 1> 点语法的基本使用: ·使用 对象.成员变量   可以实现设置成员变量值,和获取成员变量的值   2> 点语法的本质 (点语法是Xcode编译器自己帮我们完成的一个 ...

  7. OC语言@property @synthesize和id

    OC语言@property @synthesize和id 一.@property @synthesize关键字 注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明 ...

  8. 李洪强iOS开发之OC语言@property @synthesize和id

    OC语言@property @synthesize和id 一.@property @synthesize关键字 注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明 ...

  9. 「OC」@property @synthesize和id

    一.@property @synthesize关键字 这两个关键字是编译器特性,让Xcode可以自动生成getter和setter. (一)@property 关键字 @property 关键字可以自 ...

随机推荐

  1. 解决IP地址被占用问题

    问题背景: 在公司一直有同事在抱怨IP地址总是被占用的问题,我决定用技术解决这个问题 解决方案: 1 最开始想在防火墙里面做IP和mac地址绑定,做了几个之后,还是有同事在说IP被占用,后来 分析了一 ...

  2. HDU2094(产生冠军)题解

    HDU2094(产生冠军)题解 以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 根据给定现有比赛结果推断分析冠军.(这描述...我建议还是看题吧,题不长) [题目分析] 给出的 ...

  3. Android 圆形背景shape定义

    <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http: ...

  4. 学习head first python一书用到的程序(安卓开发/GAE)

    学习head first python一书用到的程序资料等文件 包括源码.电子书.一些安卓开发.gae开发程序文件,一些程序比较老,都不好找了(找了很久才收集齐),所以发上来,留给需要的人吧. 包括: ...

  5. Preorder, Inorder, and Postorder非递归总结

    Preorder, Inorder, and Postorder Iteratively Summarization[1] 1.Pre Order Traverse public List<In ...

  6. Java-Poi 读取excel 数据

    一直想着使用java操作excel,但有时各种原因一直没有实现.由于工作无意间做了个其他demo,为了进一步发散就涉及到了使用excel,为此开始正式接触POI,虽然限制不是很了解POI,但是通过查阅 ...

  7. Dict和Set类型

    花括号{}表示这是一个dict,用于类似给定一个名字,就可以直接查找分数,d={} 由于dict也是集合,len()函数可以计算任何集合的大小   使用dict本身提供的get方法,当Key不存在时, ...

  8. docker网络-如何让外部网络访问容器资源

    docker网络-如何让外部网络访问容器资源 安装httpd 服务: docker:/root# docker exec -it f63b2633d146 bash bash-4.1# yum ins ...

  9. 日本語N1文法まとめ

    1.v连用形+ものの:虽然~但是(201212-32) -(の)かというと/かといえば(201412-38)a动词ます辞書形・た形/イ形+~ な形語幹/名+~a,"至于是否・・・・・・&qu ...

  10. localStorage点击次数存储

    <!DOCTYPE html><html><head><meta charset="utf-8"> <title>菜鸟教 ...