ObjectC语言基础4—ARC、成员变量、构造方法、property
来源:互联网 发布:织梦源码安装方法 编辑:程序博客网 时间:2024/05/19 18:48
一、ARC
1、 在对象属性里只要是对象@property (nonatomic, retain) Object *object,在dealloc方法中就必须调用[_object release]方法。
2、ARC是一种编译器特性,当发现属性是retain的时候,会自动在dealloc中生成release方法。在每次创建对象的时候alloc,new,copy,也不需要release了,ARC会自动生成。
3、ARC在重写dealloc的时候不允许调用super的dealloc。整个项目是ARC是,编译器不允许我门调用release。
4、ARC原理,ARC判断准则,只要没有强指针指向对象,就会释放对象。默认情况下所有的指针都是强指针,__strong。弱指针,ARC会在弱指针指向对象不存在,会把弱指针清空。
5、在ARC中再给Property设置参数的时候,不能用retain,而应该用strong和weak,并且可以用assign基本数据类型。
6、-fno-objc-arc不允许某个文件使用ARC
- //在ARC中,没有强指针指向的对象,对象就会释放,下面的写法,生成对象后就会释放,没有意义。
- __weak Person *p = [[Person alloc]init];
- Person *p = [[Person alloc] init];
- p = NIL;//当没有强指针指向对象的时候,对象就自动释放,p在这一行释放。
view p
二、点语法
1、点语法属于编译器特性,点语法实际上还是访问get方法还是set方法,不是访问对象的属性。在写getset方法是不要适中self.age = age进行赋值,会引发死循环,要直接访问成员变量_age。同时p->也是可以访问成员变量的,不属于方法调用,又明显区别,需记住。OC数据单继承。
三、成员变量的四种作用域和使用注意
1、成员变量的四种作用域
> @private只能在当前类的@implementation实现类里面直接通过变量名访问。注意点,虽然私有成员变量不可以再子类中访问,但子类还是拥有这个成员变量。那既然拥有,其实还是可以访问的,通过get和set方法,只要父类中实现了get和set方法,子类既可以继承这些方法,访问成员变量,方法在书写时要注意使用self来赋值,提高其扩展性。通过变量名(_age)直接访问,和通过get、set方法直接访问时有区别的,子类实现了这个成员变量的get和set方法self.setAge既可以访问。
> @public任何地方都可以访问。特别注意,成员变量属于对象,没有对象如何访问,在main函数里可以访问也是通过对象来访问,不可能直接_age。
> @protected 可以在当前类及其子类的@implementation中访问。默认值时portected。
> @package同一个”体系“框架内可以访问,介于public 和private中间
2、成员变量可以卸载实现@implementation里面,默认为私有。在@implementation后的大括号里面写成员变量{}
- @interface Person:NSObject
- {
- @ public int _age; //成员变量默认是私有的
- NString *_str;//使用注意,这个成员变量会根据上面的那个也成为pulic范围。
- }
- - (void)setAge:(int)age
- - (int)age;
- @end
- @implementation Person
- {// 这里说明了没有interface一样可以实现一个类。
- int height;//在这里写的成员变量为私有。子类和其他文件都访问不到,没人会包含实现文件。不可以和头文件的成员名相同。
- }
- - (void)setAge:(int)age{
- _age = age;//默认情况下,在实现文件中可以访问下划线成员变量。
- }
- @end
三、Property和synthesize
1、Property作用是帮助我门自动生成get和set方法的声明和实现,同时还可以生成一下滑下开头的成员变量,自动生成的为@pirvate,属于编译器特性。@synthesize自动生成get和set方法的实现,以过时。
2、使用细节,使用的时候,成员变量、get和set方法,有则不自动生成,没有则生成。注意但如果同时实现了get和set方法,就不会生成下滑下的成员变量。
- //.h
- @property int age;既可以生成get和set方法的生命和实现,又可以生成成员变量。
- //.m
- //@synthesize age=_age;//自动生成get和set方法的实现,已经过时,可以不写。
三、构造方法
1、完整的创建一个可用对象,分两步。分配存储空间,初始化。new放法内部会调用两个方法alloc,init。init就是构造方法。
2、父类方法的初始化交给父类去初始化,子类负责对自己成员变量的初始化。
- //这个事重写父类的构造方法
- -(id)init{
- if(self = [super init]){//super init的目的是初始化父类的成员变量,会最先初始化父类的方法。相当于一个递归。
- _age = 10;
- self.no = 11;//no继承字父类,不可以直接使用只能使用setget方法。或者调用父类的初始化方法初始化父类内容superinit
- }
- return self;
- }
- // 在开发过程中一般自定义构造方法,传递参数进行封装。
- ObjectC语言基础4—ARC、成员变量、构造方法、property
- Java语言基础{Java_se(05)}-面向对象-封装-构造方法-成员变量,局部变量
- 黑马程序员——OC核心语法点语法,成员变量,@property和@synthetic,构造方法
- 黑马程序员——OC字符串,点语法,成员变量,@property和@synthetic,构造方法
- ObjectC语言基础3—内存管理、引用计数器、@property、模型
- OC特有语法1—点语法,成员变量作用域,@property,id,构造方法,多文件编程
- OC特有语法1—点语法,成员变量作用域,@property,id,构造方法,多文件编程
- OutMan——Objective-C中成员变量的作用域、@property和@synthesize介绍和使用、构造方法和自定义构造方法
- 黑马程序员一成员变量,@property 与 @synthesize,id,构造方法
- objective-c--- 成员变量作用域、@property、@Synthesize、id、重写,自定义构造方法
- 黑马程序员——7、OC语言(成员变量、构造方法)
- 成员方法,成员变量,局部变量,构造方法,构造器
- OC基础——点语法、@property、id、构造方法
- ObjectC语言基础1—block、protocol、代理设计模式
- ObjectC语言基础2—Foundation、结构体、字符串、集合
- OC语言——点语法和成员变量的4种作用域及property和synthesize的使用
- JAVA面向对象基础:成员变量、方法、方法的重载、构造函数
- 通过反射获取构造方法,成员变量及成员方法
- 数学基础:角度,弧度,三角函数
- EQ降龙18掌
- 备忘 windows 8.1 开发
- GitHub使用流程- Git Shell 的一些命令总结(二) 创建代码库并学会更新
- Binary Tree Postorder Traversal
- ObjectC语言基础4—ARC、成员变量、构造方法、property
- 获取来访IP和来访地址
- [leetcode] longest substring without repeating characters
- Webstorm & PhpStorm的序列号和证书
- 秉临戤戗眷聛戤傊驺讅櫽二礯惷彛
- 鼾斫惥麤嗰驗氐驢毵涑觱聭列增在明季
- 前锋培训java网址
- 2015年2月28
- 【C#】7. Bond类型(付息日定价)