for(inti=0;i<largenumber;i++){ Person * p = [Person person];代码的问题

原创 2015年11月17日 16:02:11

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.凡是你通过retainalloccopy等获得了所有权的对象,都必须在你不再使用它的时候,由你来releaseautorelease等手段来释放对它的所有权。

                      3.在一定的代码段内,对同一个对象所做的retainalloccopy的操作次数应该与releaseautorelease操作的次数相等。

                      4.可以在类的dealloc方法中释放你所占有的实例变量。

                      5.对于便利构造器和访问器来说,你没有通过retainalloccopy获得对象的所有权,因此在这些情况下你无须对获得对象进行额外的释放操作。

                      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];代码的问题

int largenumber = 1000000000;for(inti=0;i
  • yiral
  • yiral
  • 2015年11月17日 16:02
  • 444

Person p=new Person()的感悟

做过4个月的程序员,但是对程序的理解总是
  • shiguang_zhiren
  • shiguang_zhiren
  • 2014年07月07日 08:45
  • 873

深入理解利用new创建对象的执行过程以Person p=new Person(&quot;张三&quot;,20);为例

代码如下: class Person { private String name="haha"; private int age; private static String country=...
  • u011528448
  • u011528448
  • 2015年02月06日 19:02
  • 739

深入理解利用new创建对象的执行过程以Person p=new Person("张三",20);为例

代码如下: class Person { private String name="haha"; private int age; private static String country=...
  • u011528448
  • u011528448
  • 2015年01月21日 22:19
  • 1105

SparkSQL(Spark-1.4.0)实战系列(二)——DataFrames进阶

本节主要内容如下 DataFrame与RDD的互操作实战 不同数据源构建DataFrame实战 DataFrame与RDD的互操作实战1 采用反映机制进行Schema类型推导(RDD到DataFram...
  • lovehuangjiaju
  • lovehuangjiaju
  • 2015年07月17日 19:21
  • 2963

基础理论总结

1.为什么说Objective-C是一门动态的语言? 1.object-c类的类型和数据变量的类型都是在运行是确定的,而不是在编译时确定。例如:多态特性,我们可以使用父类对象来指向子类对象,并...
  • sinat_32972877
  • sinat_32972877
  • 2018年01月08日 16:35
  • 26

java 我的java学习之路 Person对象信息管理

本例演示面板,单选按钮,列表框,组合框等组件的各种不同布局方式的使用方法,对初学者是个很好的学习例子...
  • wangjian_an
  • wangjian_an
  • 2016年03月05日 15:23
  • 808

Person基础

利益熏心的我写的一个Baidu知道的东西。。- -||写一个类Person,包含以下属性:String name; int age; boolean gender;Person partner。为Pe...
  • Colonleado
  • Colonleado
  • 2009年01月03日 22:20
  • 505

小考试 纪念一下

一.选择题(共50题,其中多选题选不全或选错都不得分。) 1. 以下属于面向对象的特征的是( )。(两项) A) 重载 B) 重写 C) 封装 D) 继承2. 以下代码运行输出是( ...
  • heinika
  • heinika
  • 2015年08月20日 16:29
  • 718

【Person Re-ID】Deep-Person: Learning Discriminative Deep Features for Person Re-Identification

paper下载地址:https://arxiv.org/abs/1711.10658 Introduction 基于CNN方法的person re-id方法可以分为三类: 基于全局描述的方...
  • q295684174
  • q295684174
  • 2018年01月17日 14:55
  • 73
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:for(inti=0;i<largenumber;i++){ Person * p = [Person person];代码的问题
举报原因:
原因补充:

(最多只允许输入30个字)