在封装的类方法内部,也就是+ (id)personWithName:(NSString *)name andAge:(int)age内部:

创建了一个person对象,并且创建了一个person*类型的指针p1指向这个对象。

此时不用考虑指针p1对新创建对象retaincount的影响,因为此时(创建person对象并赋值给p之后)对象的计数器为1,类方法结束后指针p1是局部变量被回收,且将存储的地址传递给mian函数中的p2,所以现在p2指向新创建的person对象,此对象的计数器还是1。

从结果来看就是从 p1引用新对象 变成 P2引用新对象,计数器不变。

 // main.m

#import <Foundation/Foundation.h>
#import "Person.h" int main(int argc, const char * argv[]) {
@autoreleasepool
{
Person *p1 = [Person personWithName:@"东方不败" andAge:];
NSLog(@"%ld",[p1 retainCount]);
}
return ;
}
// Person.h
#import <Foundation/Foundation.h> @interface Person : NSObject
@property (nonatomic,assign) int age;
@property (nonatomic,retain) NSString *name;
- (void)setName:(NSString *)name andAge:(int)age;
+ (id)personWithName:(NSString *)name andAge:(int)age;
@end
// Person.m
#import "Person.h" @implementation Person
+ (id)personWithName:(NSString *)name andAge:(int)age
{ Person *p = [[[self alloc] init] autorelease];
p.name = name;
p.age = age;
NSLog(@"%ld",[p retainCount]);
return p;
}
- (void)setName:(NSString *)name andAge:(int)age
{
self.name = name;
self.age = age;
}
- (void)dealloc
{
[_name release];
[super dealloc];
}
@end

用类方法------>快速创建一个autorelease的对象,在封装的类方法内部的更多相关文章

  1. ASP.NET Core模块化前后端分离快速开发框架介绍之2、快速创建一个业务模块

    源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin ...

  2. [Swift通天遁地]二、表格表单-(9)快速创建一个美观强大的表单

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  3. 通过beego快速创建一个Restful风格API项目及API文档自动化

    通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...

  4. Android开发的初学者快速创建一个项目

    因为gwf的原因,大陆连不上google所以AndroidSDK是无法更新的 而且设置代理也不一定能解决问题 如果是初学者想快速的了解安卓开发,可以在国内的内网下载整合包 下载地址:http://rj ...

  5. 在.NET中快速创建一个5GB、10GB或更大的空文件

    对于通过UDP进行打文件传输的朋友应该首先会考虑到一个问题,那就是由于UDP并不会根据先来先到原则进行发送,也许你发送端发送的时候是以包1和包2的顺序传输的,但接收端可能以包2和包1 的顺序来进行接收 ...

  6. 通过beego快速创建一个Restful风格API项目及API文档自动化(转)

    通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...

  7. 如何使用IDEA快速创建一个springboot项目

    如何使用IDEA快速创建一个springboot项目 https://jingyan.baidu.com/article/0964eca24fdd938284f53640.html

  8. SpringBoot2.x入门:快速创建一个SpringBoot应用

    前提 这篇文章是<SpringBoot2.x入门>专辑的第2篇文章,使用的SpringBoot版本为2.3.1.RELEASE,JDK版本为1.8. 常规的套路会建议使用Spring官方提 ...

  9. 什么是不可变对象(immutable object)?Java 中怎么 创建一个不可变对象?

    不可变对象指对象一旦被创建,状态就不能再改变.任何修改都会创建一个新的对象,如 String.Integer 及其它包装类. 详情参见答案,一步一步指导你在 Java中创建一个不可变的类.

随机推荐

  1. [bootsrap]模态框使用例

    <a href="#modal1" role="button" class="btn btn-primary btn-sm" data ...

  2. 数据分析:.Net程序员该如何选择?

    上文我介绍了用.Net实现的拉勾爬虫,可全站采集,其中.Net和C#(不区分)的数据爬取开始的早,全国主要城市都有一定数量的分布,加上有了近期其他相似技术类别的数据进行横向比较,可以得到比较合理的推测 ...

  3. NYOJ 762

    容斥原理 http://blog.csdn.net/shiren_bod/article/details/5787722

  4. Hibernate第三次测试错题解析

    此题目考查的是Hibernate查询缓存适用的场合,对于经常使用的查询语句, 如果启用了查询缓存,当第一次执行查询语句时,Hibernate会把查询结果存放在第二缓存中. 以后再次执行该查询语句时,只 ...

  5. js中的按键事件

    参考链接:http://blog.csdn.net/zhouziyu2011/article/details/53978293 <input type="text" id=& ...

  6. 最新JavaScript、Ajax典藏级学习资料下载分类汇总 (2011年12月21日更新)

    其他网站开发相关资料            超强HTML和xhtml,CSS精品学习资料下载汇总                                               最新htm ...

  7. Linux 进程间通讯详解三

    msgctl()函数 int msgctl(int msqid, int cmd, struct msqid_ds *buf); --参数 msqid:有msgget函数返回的消息队列标识码 cmd: ...

  8. 如何动态在文档中加入<script></script>写入大段js

    <script language="javascript"> var script = document.createElement("script" ...

  9. 【原】浅谈KL散度(相对熵)在用户画像中的应用

    最近做用户画像,用到了KL散度,发现效果还是不错的,现跟大家分享一下,为了文章的易读性,不具体讲公式的计算,主要讲应用,不过公式也不复杂,具体可以看链接. 首先先介绍一下KL散度是啥.KL散度全称Ku ...

  10. C/C++实践笔记 008

    逗号运算符优先级最低逗号运算符的值是最后一个的值int a=(1,2);执行结果为2逗号运算符每一条语句都要执行,执行方向从左向右 三目运算符表达式1?表达式2:表达式3 C语言里只有0和非0的区别 ...