for(inti=0;i<largenumber;i++){ Person * p = [Person person];代码的问题
来源:互联网 发布:南风知我意 txt下载 编辑:程序博客网 时间:2024/04/19 16:53
int largenumber = 1000000000;
for(inti=0;i<largenumber;i++){
Person * p = [Person person];
[p study];
}
这段代码有什么问题,应该怎么去改?为什么?(不要修改以写出的代码)
因为便利构造器产生的对象如果没有autoreleasepool的话是无法释放的,所以当循环数值过大时,产生的对象会越来越多而且使用过的对象无法释放,内存占用越来越大,严重影响性能.所以要在for循环中使用autoreleasepool,即
intlargenumber = 1000000000;
for(int i=0;i<largenumber;i++){
@autoreleasepool{
Person * p = [Person person];
[p study];
}
}
简述内存管理的原则. 按照默认法则.哪些关键字生成的对象需要手动释放?在和property结合的时候怎样有效的避免内存泄露?
答: 1.对你自己拥有的对象负责,你只能释放你拥有的对象。
2.凡是你通过retain、alloc、copy等获得了所有权的对象,都必须在你不再使用它的时候,由你来release、autorelease等手段来释放对它的所有权。
3.在一定的代码段内,对同一个对象所做的retain、alloc、copy的操作次数应该与release、autorelease操作的次数相等。
4.可以在类的dealloc方法中释放你所占有的实例变量。
5.对于便利构造器和访问器来说,你没有通过retain、alloc、copy获得对象的所有权,因此在这些情况下你无须对获得对象进行额外的释放操作。
6.autorelease只不过意味着“预定延迟发送一条release”,当前引用计数并没有变。
通过alloc copy retain生成的对象需要手动释放。
实现类的dealloc方法,在dealloc方法中,对持有的对象进行release操作。
过意味着“预定延迟发送一条release”,当前引用计数并没有变。
@class和#import的区别? @class和#import的使用场景是什么?
@class是标记一个字符串可以作为类名使用,#import是将一个文件的内容复制到当前文件中。
在类的接口部分中需要声明其他自定义类型变量时,可以在类的头文件中使用@class标记某个字符串作为类名使用。在类的实现部分需要使用其他自定义类型对象时,需要在类的实现文件中使用#import导入头文件。
协议是什么?协议的property声明用什么属性?为什么?
协议是多个类共享的一个方法列表,在协议中所列出的方法没有响应的实现,由其它人来实现
协议的property声明用assign特性,因为要防止对象和其代理对象之间相互引用,导致无法释放内存.
扩展一个类的功能有几种途径?有什么区别?
1.类目
类目可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除原有方法。但是无法添添加实例变量
2.延展
延展可以同时添加实例变量和方法,而且添加的方法必须实现,可以视为一个私有的类目
3.协议
协议是多个类共享的一个方法列表,在协议中所列出的方法没有响应的实现.
4.继承
不但可以添加实例变量和方法,也可以重写原有类的方法.
- for(inti=0;i<largenumber;i++){ Person * p = [Person person];代码的问题
- Person p=new Person()的感悟
- person
- person
- Person
- scanf("%s",&person[i].job)与scanf("%s",person[i].job)的区别
- List<Person> persons=new ArrayList<Person>();
- 深入理解利用new创建对象的执行过程以Person p=new Person("张三",20);为例
- Person p=new Person(“zhangsan”,20);该句话都做了什么事情?
- Person p = new Person()都做了些什么动作
- Person p = new Person("li",20); 到底干了些什么?
- I am a terrible terrible person.
- I want to be a good person
- No persister for: person
- 深入理解利用new创建对象的执行过程以Person p=new Person("张三",20);为例
- Java 面向对象 Person p = new Person("zhangsan",20) ;该句话都做了什么事情?
- java面试题inti=2;i+=i-=i*i的值以及关于i++;++i;i=i+1;i+=1 的效率问题
- No TypeTag available for person
- hdu 1284
- matlab学习笔记(十一)---二值形态学运算
- js获取地址参数(当有中文时不出现乱码)
- oracle 左右内和完全链接
- windows xp系统下无法安装LoadRunner11的问题解决
- for(inti=0;i<largenumber;i++){ Person * p = [Person person];代码的问题
- iOS巅峰之NSRunLoop
- sicily 1020. Big Integer
- 在RDO自动安装的OpenStack Liberty单机中搭建能够内外网互访的网络(三)-配置规则和创建密钥对
- 80端口被NT kernel & System 占用pid 4
- stringstream clear与str("")的问题
- 创建表
- QML之Menu菜单
- Python模拟登陆(urllib2)