1. //
  2. // Person.h
  3.  
  4. #import <Foundation/Foundation.h>
  5.  
  6. @interface Person : NSObject
  7.  
  8. @property (nonatomic, assign) int age;
  9.  
  10. + (instancetype)person;
  11.  
  12. - (instancetype)initWithAge:(int)age;
  13.  
  14. + (instancetype)personWithAge:(int)age;
  15. @end
  1. // Person.m
  2.  
  3. #import "Person.h"
  4.  
  5. @implementation Person
  6.  
  7. //提供构造方法的时候也要提供类工厂方法(API里面是这么写的),如果是MRC还要提供antorelease.
  8.  
  9. + (instancetype)person //类工厂方法
  10. {
  11. return [[[self alloc] init] autorelease];
  12. }
  13.  
  14. - (instancetype)initWithAge:(int)age{ //构造方法
  15. if (self = [super init]) {
  16. _age = age;
  17. }
  18. return self;
  19. }
  20.  
  21. + (instancetype)personWithAge:(int)age //类工厂方法
  22. {
  23. /*
  24. Person *p = [[self alloc] init];
  25. p.age = age;
  26. return [p autorelease];
  27. */
  28. return [[[self alloc] initWithAge:age] autorelease]; //self = Person;
  29. }
  30.  
  31. - (void)dealloc
  32. {
  33. NSLog(@"%s", __func__);
  34. [super dealloc];
  35. }
  36. @end
  1. //
  2. // main.m
  3. // auatorelease应用场景
  4.  
  5. #import <Foundation/Foundation.h>
  6. #import "Person.h"
  7.  
  8. int main(int argc, const char * argv[]) {
  9.  
  10. @autoreleasepool {
  11.  
  12. Person *p = [[[Person alloc] init] autorelease];
  13. p.age = ;
  14. NSLog(@"age = %i", p.age);
  15.  
  16. Person *p1 = [[[Person alloc] init] autorelease];
  17.  
  18. Person *p2 = [[[Person alloc] init] autorelease];
  19.  
  20. Person *1p = [Person person];
  21. 1p.age = ;
  22. NSLog(@"age = %i", 1p.age);
  23.  
  24. // 注意: Foundation框架的类, 但凡是通过类工厂方法创建的对象都是autorelease的
  25. [[NSString alloc] init];
  26. [NSString string];
  27.  
  28. // [NSString alloc] initWithString:(NSString *)
  29. // [NSString stringWithString:(NSString *)];
  30.  
  31. Person *p = [[[Person alloc] initWithAge:] autorelease];
  32. NSLog(@"age = %i", p.age);
  33.  
  34. Person *p = [Person personWithAge:];
  35. NSLog(@"age = %i", p.age);
  36.  
  37. }
  38. return ;
  39. }

oc54--auatorelease应用场景的更多相关文章

  1. 拨开迷雾,找回自我:DDD 应对具体业务场景,Domain Model 到底如何设计?

    写在前面 除了博文内容之外,和 netfocus 兄的讨论,也可以让你学到很多(至少我是这样),不要错过哦. 阅读目录: 迷雾森林 找回自我 开源地址 后记 毫无疑问,领域驱动设计的核心是领域模型,领 ...

  2. [NodeJS] 优缺点及适用场景讨论

    概述: NodeJS宣称其目标是“旨在提供一种简单的构建可伸缩网络程序的方法”,那么它的出现是为了解决什么问题呢,它有什么优缺点以及它适用于什么场景呢? 本文就个人使用经验对这些问题进行探讨. 一. ...

  3. Asp.Net MVC中使用StreamReader读取“Post body”之应用场景。

    场景:有三个市场(Global.China.USA),对前台传过来的数据有些验证需要细化到每个市场去完成. 所以就出现了基类(Global)和派生类(China.USA) 定义基类(Global)Pe ...

  4. Java学习之反射机制及应用场景

    前言: 最近公司正在进行业务组件化进程,其中的路由实现用到了Java的反射机制,既然用到了就想着好好学习总结一下,其实无论是之前的EventBus 2.x版本还是Retrofit.早期的View注解框 ...

  5. Android线程管理之ThreadLocal理解及应用场景

    前言: 最近在学习总结Android的动画效果,当学到Android属性动画的时候大致看了下源代码,里面的AnimationHandler存取使用了ThreadLocal,激起了我很大的好奇心以及兴趣 ...

  6. MVC常遇见的几个场景代码分享

    本次主要分享几个场景的处理代码,有更好处理方式多多交流,相互促进进步:代码由来主要是这几天使用前端Ace框架做后台管理系统,这Ace是H5框架里面的控件效果挺多的,做兼容也很好,有点遗憾是控件效果基本 ...

  7. RabbitMq应用一的补充(RabbitMQ的应用场景)

    直接进入正题. 一.异步处理 场景:发送手机验证码,邮件 传统古老处理方式如下图 这个流程,全部在主线程完成,注册->入库->发送邮件->发送短信,由于都在主线程,所以要等待每一步完 ...

  8. javascript之闭包理解以及应用场景

    半个月没写博文了,最近一直在弄小程序,感觉也没啥好写的. 之前读了js权威指南,也写了篇博文,但是实话实说当初看闭包确实还是一头雾水.现在时隔一个多月(当然这一段时间还是一直有在看闭包的相关知识)理解 ...

  9. TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析

    TYPESDK 服务端设计思路与架构之一:应用场景分析 作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各 ...

随机推荐

  1. js技巧(二)

    1.封装获取id: function show(Id){ var aa=document.getElementById(Id); return aa; } 调用:console.log(show(&q ...

  2. js 翻页

    翻页功能是js很基础的一个算法,且用得很多,所以必须掌握此项技能. 我们要想清楚在实现翻页的过程中需要哪几个步骤: 1.我们首先需要的变量有哪些,必须的有一个存放当前页码的变量nowPage.一个存放 ...

  3. SQL基本操作——JOIN多表联查

    基本概念 join :用于根据两个或多个表中的列之间的关系,从这些表中查询数据. join和key:有时为了得到完整的结果,我们需要从两个或更多的表中获取结果.我们就需要执行 join.数据库中的表可 ...

  4. 调用.NET Serviced Component引发的性能问题及其解决

    在企业用户环境里,.NET Serviced Component使用广泛.它比较好的把传统COM+封装和.NET应用逻辑衔接了起来,在服务器端应用起到重要作用..NET Serviced Compon ...

  5. 循环语句和方法(day4)

  6. codeforces_725C_字符串

    C. Hidden Word time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...

  7. Netty 长连接服务

    转自:https://www.dozer.cc/2014/12/netty-long-connection.html 推送服务 还记得一年半前,做的一个项目需要用到 Android 推送服务.和 iO ...

  8. 洛谷——P1613 跑路

    P1613 跑路 题目大意: 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B ...

  9. flask之配置文件的加载和动态url的使用

    七行代码实现一个flask app from flask import Flask app = Flask(__name__) @app.route('/') def helloworld(): re ...

  10. SSH免密登录的错误

    为了避免每次在测试环境启动hadoop都需要输入密码, 使用免密操作 ssh-keygen,然后一直按enter键 接着需要输入root密码, 输入root密码后一直报错,密码不正确, permiss ...