内存管理、单例

1、内存管理

  • 1.1 函数、属性定义

/** 定义一个define函数 */
#define TT_RELEASE_CF_SAFELY(__REF) { if (nil != (__REF)) { CFRelease(__REF); __REF = nil; } }
/** 强引用、弱引用 */
#define CHWeakSelf(type)  __weak typeof(type) weak##type = type;
#define CHStrongSelf(type)  __strong typeof(type) type = weak##type;
  • 1.2 处理ARC和MRC,对象释放

/** 使用ARC和不使用ARC */
#if __has_feature(objc_arc)
    //compiling with ARC
#else
    // compiling without ARC
#endif

/** 释放一个对象 */
#define SAFE_DELETE(P) if(P) { [P release], P = nil; }

2、单例

  • 2.1 单例(合并)


#define SYNTHESIZE_SINGLETON_FOR_CLASS(classname) static classname *shared##classname = nil; + (classname *)shared##classname { @synchronized(self) { if (shared##classname == nil) { shared##classname = [self alloc] init]; } } return shared##classname; } + (id)allocWithZone:(NSZone *)zone { @synchronized(self) { if (shared##classname == nil) { shared##classname = [super allocWithZone:zone]; return shared##classname; } } return nil; } - (id)copyWithZone:(NSZone *)zone { return self; }
  • 2.2 单例(分开)

#pragma mark 接口.h
#define singleton_interface(className) +(className *)shared##className;

#pragma mark 实现.m
#define singleton_implementation(className) static className *_instance;+(id)shared##className{if(!_instance){_instance=[[self alloc]init];}return _instance;}+(id)allocWithZone:(struct _NSZone *)zone{static dispatch_once_t dispatchOnce;dispatch_once(&dispatchOnce, ^{_instance=[super allocWithZone:zone];});return _instance;}

原文地址:https://www.cnblogs.com/CH520/p/9392998.html

时间: 2024-11-24 23:23:03

内存管理、单例的相关文章

界面传值,单例,模态

v 界面间传值场景 1.由前往后属性传值.在后一个界面中定义属性(属性类型和数据类型一致) 2.当push到下一个界面之前给属性赋值3.在下一个界面中,对应的控件从属性中获取数据 2. 由前往后 协议代理,1.在后一个界面定义协议(协议中定一个传值方法,方法由参数,参数类型和传输类型一致)2.在后一个界面定义代理属性,3.在前一个界面中设置代理4.代理对象的类服从协议 3.多界面传值(即可以从前往后,也可以从后往前) 单例一个类只有一个对象 1.新建一个单例类 2.添加便利构造器方法并且保证该方

一次性代码(单例)

//  CZTool.h 一次性代码 #import <Foundation/Foundation.h> @interface CZTool : NSObject // 用单例设计模式,可以节省内存. // 书写单例 // 1. 对外提供一个获取单例对象的接口(API) +(instancetype)sharedCZTool; @end //  CZTool.m 一次性代码 #import "CZTool.h" @implementation CZTool // 定义一个全

java — 单例

java -- 单例模式 singleton 一. 单例模式 singleton 单例模式,在我看来,就是一个类,可以称它为 单例类 ,单例类有以下特点 单例类在堆内存中只会存在一份,即永远只有一个固定不变的堆内存地址 单例类是自己主动实例化的 工程中所有的类 都可以访问到单例类 二. 单例类的创建 拥有私有的构造方法 一个私有.静态的 实例化,只供内部调用 提供一个公开.静态的方法,用来返回 内存变量 1 public class Singleton { 2 // 定义了一个私有.静态的 实例

Spring SingletonBeanRegistry 单例 Bean 注册管理

Spring SingletonBeanRegistry 单例 Bean 注册管理 在 Spring 中 Bean 有单例和多例之分,只有单例的 bean 才会被 BeanFactory 管理,这个工作就是由 SingletonBeanRegistry 完成的. public interface SingletonBeanRegistry { void registerSingleton(String beanName, Object singletonObject); Object getSi

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

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

SpringMVC之控制器的单例和多例管理

版权声明:本文为博主原创文章,未经博主允许不得转载. 在使用Spring3对控制器Controller进行bean管理时,如果要对控制器是否单例进行管理. 有两种方式配置多例模式: 1.springXML 2.注解本身的控制器类 [java] view plaincopyprint? @Controller @Scope("prototype") public class HelloContorller { private int index=0; Logger logger=Logg

ios-3-简单内存管理

1.在OC中,每个对象都有一个保留计数,创建时每个对象都有一个初始值为1的保留计数,释放时,保留计数都为0 2.创建(自动释放的)对象 +(Car *)car { Car *myCar = [[Car alloc] init]; return [myCar autorelease]; } 3.创建已保留属性 @property (retain)NSArray *colors: synthesize(综合)创建后,自动保留该对象,如果该对象被重新赋值,前面的值将被自动释放 4.创建对象的其他方式

Unity3D 单例(singleton)管理类

在Unity3D中,有什么好的方法去创建一个单例游戏管理类,可以像一个全局类的静态变量一样到处访问? 在Unity中有什么接口吗?我是否要把这个脚本添加到一个物体上呢?这个类可以仅仅放在文件夹里不用添加到场景里吗? 通常来说视情况而定,常用的两种单例类. (1)组件式的添加在物体上. (2)不从MonoBehaviour继承的独立类. public class MainComponentManger { private static MainComponentManger instance; p

Egret场景切换管理类切换和单例使用方法

场景切换是很多开发者在开发过程中必不可少的一个环节,当项目中有两个或两个以上的游戏场景时,怎样管理这些场景,能够使它们之间的切换更加方便呢?今天就为大家介绍场景切换管理类的切换方法和单例的使用方法. 案例源码:https://github.com/hkjlx/qhcj 首先创建一个所有场景的父类Scene Scene类主要是为了方便管理场景,此类是一个抽象类,子类必须继承此类并实现onComplete()抽象方法才能进行场景的切换. abstract class Scene extends eu