Objuct-c 对象的初始化 存起器 属性 self和super 内存管理

对象初始化:

-(id)init;万能类型,能返回各种对象,可能会导致类型错误。

-(instancetype)init;当前类的类型(推荐大家选)

if的判断语句中self是等于[super init]而不是判断,初始化失败的话就返回空 ,这时返回0给self自己,自己就变成空对象。

指定初始化方法

一般是参数最多的一种初始化方法:

其他初始化都直接间接调用指定初始化,出现错误以后可以直接从指定初始化中找出错误。

一个类需要一个指定初始化方法。

存取器方法:

get的方法和实例变量同名。

set是设置的方法,方法名命的格式set实例变量名。

有了存取器的方法,可以使用点语法,两种方法等价。

[实例变量名 name] 或者 实例变量名. name。

点语法是为了减少程序员编写的时间,本质不变。

设置了了set方法以后,也可以用点语法。

只有get和set方法能点语法。其他语法只能用[]

属性声明

点H文件中

@poroperty(nonatomic,retain)NSString* name...

点M文件中synthesize name....

在synthesize age_oldage,这样就可以在main文件中直接用oldage = 10;但是self.age只能这么用,两者等同于[self setoldage:10];

@poroperty()括号中的词

线程相关的

1、原子性 atomic (默认)(一般使用这个)

2、非原子性 nonatomic

读/写

1、readonly只产生getter方法,不生成setter的方法

2、readwirte (默认)都会产生读取和设置的方法

在获取和设置方法中,可以用getter和setter设置得到和设置的设置名:

@property(nonatomic,getter = getNo,setter = setNo:)NSString* sid

[zhang setNo:@"111"]

得到他的值的

zhang.getNo

4.6版本以后

可以不声明实例变量,只声明属性,声明属性后会自动声明实例变量

seif和super

把具体实例方法绑定到对象的是self

内存管理规则

时间: 2024-10-13 01:49:36

Objuct-c 对象的初始化 存起器 属性 self和super 内存管理的相关文章

关于对象的数据属性和访问器属性

ECMAScript中有两种属性:数据属性和访问器属性. 数据属性: 数据属性包含一个数据值的位置,在这个位置可以读取和写入值.数据属性有4个描述其行为的特性. 1. [[Configurable]] 2. [[Enumerable]] 3. [[Writable]] 4. [[Value]] 要修改属性默认的特性,必须使用 Object.defineProperty()方法.这个方法接收三个参数,属性所在的对象,属性的名字和一个描述符对象.其中,描述符对象的属性必须是:configurable

浅谈js对象之数据属性、访问器属性、Object.defineProperty方法

一.对象 这个不用多说,常见的几种创建对象的方法有: 1.通过构造函数创建对象,如下所示: function Person(){ } var person = new Person(); 2.通过Object创建简单对象,例如: var obj = new Object(); 3.通过字面量创建对象. var obj = {}; 常用的一般是第一种和第三种方法. 二.属性类型 javascript中有两种属性:数据属性和访问器属性,确切的说这两种特性是用来描述对象属性的各种特征,比如说这个对象属

spark内存管理器--MemoryManager源码解析

MemoryManager内存管理器 内存管理器可以说是spark内核中最重要的基础模块之一,shuffle时的排序,rdd缓存,展开内存,广播变量,Task运行结果的存储等等,凡是需要使用内存的地方都需要向内存管理器定额申请.我认为内存管理器的主要作用是为了尽可能减小内存溢出的同时提高内存利用率.旧版本的spark的内存管理是静态内存管理器StaticMemoryManager,而新版本(应该是从1.6之后吧,记不清了)则改成了统一内存管理器UnifiedMemoryManager,同一内存管

黑马程序员---OC基础6【内存管理】【手动内存管理】【单、多个对象的内存管理】【*@property参数】【@class的使用】【NSString类的内存管理】【autorelease使用】

------- iOS培训.Android培训.Java培训.期待与您交流! ---------- [内存管理] 1.内存管理概念 由于移动设备内存及其有限,所以每个app所占的内存也是有限的 需要回收一些不使用的空间 2.OC内存管理的范围 管理任何继承NSOject的对象,对其他的基本数据类型无效 主要管理堆区中的对象的内存管理   3.内存管理的原理 1)对象所有权概念 任何对象都可以能拥有一个或多个所有者,只要一个对象至少还拥有一个所有者,他就会继续存在 cocoasu所有权策略 任何自

STL内存管理器的分配策略

STL提供了很多泛型容器,如vector,list和map.程序员在使用这些容器时只需关心何时往容器内塞对象,而不用关心如何管理内存,需要用多少内存,这些STL容器极大地方便了C++程序的编写.例如可以通过以下语句创建一个vector,它实际上是一个按需增长的动态数组,其每个元素的类型为int整型: stl::vector<int> array; 拥有这样一个动态数组后,用户只需要调用push_back方法往里面添加对象,而不需要考虑需要多少内存: array.push_back(10); a

C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询

1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法和属性等.Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为.例如,在一个方法前标注[Obsolete]特性,则调用该方法时VS则会提示该方法已过期的警告,如下图: 又如,在.Net Re

对象/集合初始化器

1. 对象初始化器 对象的初始化工作一般都是在其构造函数中进行的,但是有些时候,需要我们手动的来进行一些赋值操作,比如 //传统的方式 Person p1 = new Person(); p1.Name = "小李"; p1.Age = 23; //对象初始化器 Person p2 = new Person() {Name="小明",Age=26 }; 反编译代码: 我们可以看出出来,对象初始化器的作用:创建一个person类型的临时对象<>g_init

java中类的初始化和对象的初始化

静态的属于全局静态区,这个部分独立存在,不管是成员还是块,都是静态的,大家地位相等,先到先得. 然后是成员初始化,这个部分在类的构造函数前初始化,因为编译器(或者设计者)可能认为构造函数调用了这个成员变量,所以在其前初始化了.或者说是成员自己有自己的能力来初始化自己,不用构造函数来管,这部分属于能力比较强的,虽然没有静态的地位高,但是,还是能自给自足的一部分团体. 最后才构造函数,这个时候就开始动工来建立这个类的实例了.这个步骤相当于建大楼,终于开始建立了,前面的准备工作已经准备完了,下面就开始

对象的初始化与清理

随着计算机革命的发展,"不安全"的编程方式已经逐渐成为了编程代价高昂的主因之一. 正确的初始化和清理过程对于程序的安全性和性能至关重要,不同的编程语言对此具有不同的处理机制.C++中利用构造器完成初始化,当对象不再被使用时调用析构函数完成销毁,程序员需要手动完成内存释放管理过程:Java也采用了构造器完成初始化,同时提供了垃圾会收器对不再使用的内存资源进行自动管理,减轻了程序员管理手动管理内存的编程负担. 1 重载 Java(和C++)中,构造器是强制重载方法名的原因之一.因为构造器常