第一部分 1.9 OC基本语法-ARC

一、基本简介

  • ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain、release、autorelease语句。你不再需要担心内存管理,因为编译器为你处理了一切
  • ARC 是编译器特性,而不是 iOS 运行时特性,它也不是类似于其它语言中的垃圾收集器。因此 ARC 和手动内存管理性能是一样的,有时还能更加快速,因为编译器还可以执行某些优化

二、基本原理
1.规则
ARC 的规则非常简单:只要还有一个强指针变量指向对象,对象就会保持在内存中

2.强指针和弱指针

  1. 默认所有实例变量和局部变量都是Strong指针
  2. 弱指针指向的对象被回收后,弱指针会自动变为nil指针,不会引发野指针错误

三、使用注意

不能调用release、retain、autorelease、retainCount
可以重写dealloc,但是不能调用[super dealloc]
@property : 想长期拥有某个对象,应该用strong,其他对象用weak
其他基本数据类型依然用assign
两端互相引用时,一端用strong、一端用weak

时间: 2024-10-08 12:42:46

第一部分 1.9 OC基本语法-ARC的相关文章

第一部分 1.10 OC基础语法-点语法、构造方法、结构体

一.点语法 新建一个person类 #import <Foundation/Foundation.h> @interface Person : NSObject { int _age; } - (void)setAge:(int)age; // 方法名是setAge: - (int)age; // 方法名是age // 方法名是setAge:andNo: // - (void)setAge:(int)newAge andNo:(int)no; @end #import "Person

第一部分 1.8 OC基础语法-Block

一.Block基本含义 Block封装了一段代码,可以在任何时候执行 Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值. 苹果官方建议尽量多用block.在多线程.异步任务.集合遍历.集合排序.动画转场用的很多 二.Blocks的定义 Blocks的定义: int (^MySum)(int, int) = ^(int a, int b) { return a+b; }; 定义了一个叫MySum的blocks对象,它带有两个int参数,返回int.等式右边就是block

第一部分 1.12 OC基础语法-类的声明和实现,static和变量,typedef

新建一student类 只是用来声明Student这个类有哪些成员变量和方法 #import <Foundation/Foundation.h> // @interface代表声明一个类 // : 代表继承 @interface Student : NSObject { // 成员变量要定义在下面的大括号中{} int age; int no; } // 在这里声明的所有方法都是公共 // age的get方法 // - 代表动态方法 + 代表静态方法 - (int)age; // age的se

iOS开发——面试篇&amp;OC基本语法总结(面试)

OC基本语法总结(面试) C和OC对比 OC中主要开发在什么平台上的应用程序? 答:可以使用OC开发Mac OS X平台和iOS平台的应用程序 OC中新增关键字大部分是以什么开头? 答:OC中新增关键字大部分是以@开头 OC中新增加了那些数据类型? 答: Block类型 指针类型(Class, id类型) 空类型 特殊类型(SEL, nil) 面向对象特性是什么? 答:继承性,封装性,多态性 import和#include有什么区别? 答:import 的功能和 include一样, 是将右边的

OC点语法和变量作用域

OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObject 4 { 5 int _age;//默认为@protected 6 } 7 8 - (void)setAge:(int)age; 9 - (int)age; 10 11 @end Person类的实现: 1 #import "Person.h" 2 3 @imp

[Objective-c 基础 - 2.2] OC弱语法、类方法

A.OC弱语法 1.在运行的时候才会检查方法的声明和实现 2.没有声明只有实现的方法也能正常运行,只要在调用之前定义即可 3.类的声明必须存在,否则会出现运行时错误 B.类方法 1.是类名调用的方法 2.使用加号修饰的方法 3.类方法和对象方法可以重名 4.对象方法和类方法都允许多次声明,都不允许多次定义 5.类方法不能访问实例变量 1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObject 4 - (void) t

【黑马程序员】————OC特有语法

一.点语法 点语法的本质还是方法调用 p.age = 10; // [p setAge:10]; int a = p.age; // [p age]; 二.成员变量的作用域 @public : 在任何地方都能直接访问对象的成员变量 @private : 只能在当前类的对象方法中直接访问(@implementation中默认是@private) @protected : 可以在当前类及其子类的对象方法中直接访问 (@interface中默认就是@protected) @package : 只要处在

OC中语法糖,最新语法总结

<span style="font-size:24px;"> 1.方法与顺序无关 2.枚举绑定数据类型 enum { ObjectiveC, Java, Ruby, Python, Erlang }; typedef NSUInteger Language; 3. 属性不用写@synthesize 4.语法简化 4.1 NSNumber NSNumber *value; value = @12345; value = @123.45f; value = @123.45; v

黑马程序员-OC特有语法:分类category,给NSString增加方法计算字符串中数字的个数

1:分类的使用场景:想对一个类,扩充一些功能,而又不改变原来类的模型,也不用继承,这时OC中的特有语法:分类可以做到: 当然分类也是一个类,也需要声明和实现,声明在.h文件中,实现在.m文件中,格式如下 // 声明 @interface  类名  (分类名称) @end // 实现 @implementation 类名 (分类名称) @end 2:分类的好处,当一个类比较庞大时,不同的部分可以放到不同的分类中,也方便团队中类的开发: 3:分类使用注意: a:分类不能增加成员变量,只能对原类增加方