3 属性与实例变量

来源:互联网 发布:java复试 编辑:程序博客网 时间:2024/05/22 17:07

类型成员

这里写图片描述

数据成员

*注意,可以用属性访问的情况下,尽量不要直接访问实例变量,否则引用可能会有内存管理问题出现。
初始化和析构器以及自定义访问器方法中才直接访问实例变量。因为这引用类型有内存管理附加方法,但是这三个方法的生存周期比较特殊,因此不会出现问题。

// @property 类型 [类类型需要'*'号,值类型不需要] 属性名称;@property NSString * name;@property int age;// 可以自定义访问器方法@property (getter=giveName, setter=setName) NSString * name;/* OC中并不支持类属性。但是可以可以通过C语言方法模拟一个类属性。 */static int _max = 100;+(int)max {    return _max}+(void)setMax:(int)newValue {    _max = newValue}// 可以直接定义实例对象,但是就只有类内可以访问了。@implementation CustomClass {    int _age;}@end

这里写图片描述

实例变量

实例变量一般都是私有的,但是可以通过@public 让他公有化,但是,很少见。

@interface Shape : NSObject  {    @public int _data;}// 访问时,以类似C语言的风格进行shape->_data = 10

这里写图片描述

生存周期

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

atomic:

atomic属性可以确保在多线程情况下,不会同时有多个线程对属性进行操作。

weak:

ARC机制之下。通过自动引用计数来决定对象是否可以被释放。
如果两个对象之间相互引用,在该对象从栈上释放之后,由于在堆中任然有指针指向他们,所以他们的自动引用计数会一直大于0,因此无法被释放。
因此需要对这种情况下的对象使用(weak)描述特性,使用了weak之后,该指针不会增加自动引用计数,因此可以阻止循环引用。

copy:

正常情况下,对象之间的赋值其实是对指针的拷贝,因此赋值之后,赋值对象与被赋值对象其实是指向同一个堆的位置,当其中之一进行数据操作之后,其他对象也会被影响。
而加了copy之后,再进行赋值的时候,会对赋值对象进行深拷贝并传递拷贝出来的新内容给被赋值对象。这种情况下,会在堆中新建新的内容,因此不会相互影响。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 龋齿树脂填充老化后怎么办 小孩补过的牙疼怎么办 颜料弄到墙纸上怎么办 4岁的宝宝不爱涂色怎么办 oppo手机截图存不到相册怎么办 做的ih5保存不了怎么办 小偷偷东西发现后逃跑了怎么办? 网上有人传迷信诅咒怎么办 颜料粘在衣服上怎么办 家里有小偷撬锁怎么办 在家有人在撬门怎么办 6个月的宝宝腹泻怎么办 六个月大的宝宝拉肚子怎么办 六个月宝宝着凉拉肚子怎么办 六个月婴儿着凉拉肚子怎么办 怀孕六个月着凉拉肚子怎么办 六个月的婴儿消化不好怎么办 六个月婴儿不好好吃奶怎么办 六个月婴儿消化不好怎么办 六个月婴儿肠胃不好怎么办 受了惊吓后睡眠不好怎么办 宝宝夏季吃饭不爱带围嘴怎么办 3岁宝宝爱看电视怎么办 新生儿晚上哭闹不睡觉怎么办 档案丢了怎么办失业证 三岁宝宝不合群怎么办 阴唇手术半月了疤痕增生怎么办 宝宝小阴唇黏连怎么办 6个月宝宝阴唇粘连怎么办? 高一孩子不爱上学怎么办 3岁宝宝外阴发红怎么办 40爸妈离婚我该怎么办 小儿吃糖卡住了怎么办 额头撞墙上肿了怎么办 宝宝额头撞肿了怎么办 小孩额头撞肿了怎么办 宝宝撞到额头肿了怎么办 小孩子上一年级语文很差了怎么办? 楼下说小孩太吵怎么办 托班的小孩太吵怎么办 宝宝两岁只会简单的词怎么办