1、objective-c中有垃圾回收机制吗?  没有像java.C#一样的垃圾回收机制,但是有ARC自动引用计数器技术,根据对象的引用技术来判断对象是否还在使用,如果RC=0,则系统就会销毁对象,实现垃圾回收.

2、简述对内存管理的理解,内存管理的原则,内存管理的实现机制。

1)理解:

每个程序都会使用内存,在需要时分配内存,程序结束时释放占用的内存,如果只分配不释放内存,会造成内存泄露,内存占用增加甚至导致程序崩溃。在oc中,对象不断被创建、使用和销毁,为了不增加额外的内存,必须及时释放。

2)内存管理的原则: 对你自己拥有的对象负责,你只能释放你拥有的对象。

凡是你通过retain、alloc、copy等获得了所有权的对象,都必须在你不再使用它的时候,由你来release、autorelease等手段来释放对它的所有权。

在一定的代码段内,对同一个对象所做的retain、alloc、copy的操作次数应该与 release、autorelease操作的次数相等。

可以在类的dealloc方法中释放你所占有的实例变量。 对于便利构造器和访问器来说,你没有通过retain、alloc、copy获得对象的所有

权,因此在这些情况下你无须对获得对象进行额外的释放操作。 Autorelease只不过意味着“预定延迟发送一条release”,当前引用计数并没有

变。
3)实现机制

为了降低内存开销,需要及时释放不在被使用的对象。但是,需要明确两个问题:
是否有权利释放和什么时候释放。

释放的权利:参照内存管理原则。

释放的时机:对象可以有1个以上的所有者,所有者为0时释放对象。使用“引用计 数(retaincount)”,retaincount的数值根据对象所有者的数目增减,当retaincount=0 时,表示该对象不再被使用,系统释放该对象。

3、简述NSAutoreleasePool的工作机制。

在每一个事件周期(event cycle)的开始,系统会自动创建一个自动释放池;在每一个事件周期的结尾,系统会自动销毁这个自动释放池。一般情况下,你可以理解为:当你的代码在持 续运行时,自动释放池是不会被销毁的,这段时间内你也可以安全地使用自动释放的对象;当你的代码运行告一段落,开始等待用户输入(或者其它事件)时,自动 释放池就会被释放掉,池中的对象都会收到一个release消息,有的可能会因此被销毁。并且,在以下两种情况下,你需要手动建立并手动销毁掉自动释放池: 1.当你在主线程外开启其它线程时:系统只会在主线程中自动生成并销毁掉自动释放池。 2.当你在短时间内制造了大量自动释放对象时:及时地销毁有助于有效利用iPad上有限地内存资源。

当我们向池内发送release消息后,自动释放池就被销毁了.

4、调用一个便利构造器方法创建对象,是否需要释放。

不需要释放,因为便利构造器方法建立的对象已经方法自动释放池里,延迟释放

5、autorelease的对象是在什么时候被release的。

An autorelease pool stores objects that are sent a release message when the pool itself is drained.

当自动释放池被销毁的时候就会全部释放池子中的对象

6、解释(alloc、init、copy、retain、release、autorelease、dealloc, retainCount)定义和在内存管理中的作用。

alloc 创建对象,并把RC设为1    init 初始化对象

copy和retain都使RC的值加1,使用copy的属性必须实现了NSCopying协议

release和autorelease都使RC的值减1,autorelease不会立刻使对象释放,起到延迟释放的作用

dealloc方法是对象被销毁的时候系统调用的方法

retainCount记录RC的值,当retainCount=0时,对象就会被销毁

7、对象的内存是在什么时候被释放的(dealloc方法什么时候会被调用)?

对象内存RC的值为0的时候被释放,当对象被释放的时候dealloc就会被调用.

8、OC中,与alloc语义相反的方法是dealloc还是release?与retain语义相反的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是 dealloc还是release,为什么?

与alloc语义相反的方法是dealloc,因为alloc是创建对象的时候调用的方法,dealloc是销毁对象的时候调用的方法,对RC计数没有影响.与retain相反的方法是release,因为retain使RC值加1,release使RC计数减1;需要与alloc配对使用的方法是dealloc,对象被创建了就需要被销毁.

alloc与dealloc语义相反,创建变量、释放变量; retain与release语义相反,保留引用计数、释放引用计数; alloc与release配对使用,使用alloc给一个对象分配内存,retaincount加1,对象调用release方法,retaincount减1.

10、写一个完整的便利构造器。

-(id)initWithName:(NSString*)name age:(int)age gender:(NSString*)gender adderss:(NSString*)address//初始化方法,供便利构造器使用
{
    if (self=[super init]) {
        self.name=name;
        self.age=age;
        self.adderss=address;
        self.gender=gender;       
    }
    return self;
}
 
+(id)PeopleName:(NSString*)name age:(int)age gender:(NSString*)gender adderss:(NSString*)address//便利构造器
{
    id obj=[[self alloc] initWithName:name age:age gender:gender adderss:address];
    return obj;
}

11、有一个NSStirng类型的,retain方式声明name属性的setter和getter方法

声明部分:

@interface People : NSObject
{
    NSString *name;
}
-(void)setName:(NSString *)aname;
-(NSString *)name;
  @end
实现部分:

@implementation People
-(void)setName:(NSString *)aname
{
    if (name!=aname ) {
        [name release];
      name= [aname retain];
    }
}
-(NSString *)name
{
    return name;
}
@end

12、以下每⾏行代码执⾏行后,person对象的retain count分别是多少?

Person *person = [[Person alloc] init];    RC=1

[person retain];   RC=2

[person release]; RC=1

[person release]; RC=0

13、在一个对象的方法里面:self.name = “object”; 和name =”object”
有什么不同吗?

self.name调用了对象里面的setter方法,给对象里面的name赋值,name="object"是给局部变量赋值,二者属于不同变量.

14、-(void)setPeople:(NSString *)p

{self.people = p;
}这段代码有什么问题。

这段代码没有处理内存问题,应该改为

-(void)setPeople:(NSString *)p

{

if(self.people!=p)

{[self.people release];

self.people =[ p retain];}

}
15、for (int i=0;i<largenumber:i++){

Person * p = [Person person]; [p study];

} 这段代码有什么问题,应该怎么去改?//for(int i=0;i<largenumber;i++)

16 、 Aclass *_aclass = [[[[Aclass alloc] init] autorelease] autorelease];解释每次方法执行后的retainCount。

alloc之后为1,autorelease之后为0,再autorelease就会出现野指针错误

17、用c语言写一个冒泡排序(排序的判断条件不是固定的,使用函数指针实现)。

void bubbleSort(int arr[],int n)
{
    int *p=arr;int temp;
    for (int i=0; i<9; i++) {
        for (int j=0; j<9-i; j++) {
            if (*(p+j)>*(p+j+1)) {
                temp=*(p+j);
                *(p+j)=*(p+j+1);
                *(p+j+1)=temp;
            }
        }
    }
}

18、用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)

#define DAYSOFYEAR (365*24*60*60)

19、写一个"标准"宏MIN ,这个宏输入两个参数并返回较小的一个。

#define MIN (a)>(b)?(b):(a)

oc练习

1,(1)截取字符串”20 | http://www.baidu.com”中,”|”字符前面和后面的数据,分别
输出

NSString *str=@"20|http://www.baidu.com";
           NSArray *arr= [NSArray array];
          arr=  [str componentsSeparatedByString:@"|"];
            NSLog(@"%@",arr);
            }

(2)从字符串@“aBcD_EfGk”中取出EfGk,并让大写字母转成小写,输出efgk

NSString *str=@"aBcD_EfGk";
 str=[str lowercaseString];
 NSArray *arr= [NSArray array];
 arr=  [str componentsSeparatedByString:@"_"];
 NSLog(@"%@",arr[1]);

(3)给定一个字符串,判断字符串中是否含有“png”,如果有就删除。

NSString *str=@"abcdefdpngcdd";
            str=[str stringByReplacingOccurrencesOfString:@"png" withString:@""];
            NSLog(@"%@",str);

(4)如何将敏感字变成**  使用字符串替换函数:stringByReplacingOccurrencesOfString:withString:

(5)OC中的数字对象都有哪些,列出数据类型,选择任意一种数据类型创建数字对象。

  NSNumber是Objective-c的数字对象,相当于将一个数字包装为一个对象

NSNumber*number=[NSNumber numberWithInt:123];//将int转换成NSNumber

int a=[number intValue];//得到int类型的值

(6)NSRange是什么数据类型,成员变量有哪些,都有什么作用?NSRange和 NSString怎么相互转换。

结构体数据类型,成员变量包括location,length.location决定位置,length决定长度,原型如下:

typedef struct _NSRange {
    NSUInteger location;
    NSUInteger length;
} NSRange;

NSRange和 NSString相互转换:

NSRange ran=NSMakeRange(12, 32); NSLog(@"%@",NSStringFromRange(ran));

NSRangeFromString(@"2,3");

(7)数组有什么特点?

1. 数组元素依次存放,使用连续的内存
2. 数组名为常量指针
3. sizeof(数组名) 表示数组所占的内存字节数

程序员是怎么炼成的---OC题集--练习答案与题目(2)的更多相关文章

  1. 程序员是怎么炼成的---OC题集--练习答案与题目(1)

    一. 1. 定义3个类,全部代码.效果:能默写,关键词全部正确. 2. ⾯面向对象和⾯面向过程有什么区别? 答:面向对象以事物(对象)为核⼼,完成事件只是一个任务.面向过程以事件为核心,为了完成任务, ...

  2. 程序员是怎么炼成的---OC题集--练习答案与题目(3)

    1.init 2.initWithBytes:length:encoding: 3.initWithCharacters:length: 4.initWithCString:encoding: 5.i ...

  3. Android程序员提加薪被拒,刷2000题跳槽涨薪50%!

    为什么想跳槽? 简单说一下当时的状况,我在这家公司做了两年多,这两年多完成了一个大项目,作为开发的核心主力,开发压力很大,特别是项目上线前的几个月是非常辛苦,几乎每晚都要加班到12点以后,周末最多只有 ...

  4. 打杂程序员之ftp换成外网ip咋就登陆不上?

    主动模式ftp N连接到ftp的21端口.然后客户端开端口监听,并通过N+1端口发送命令给FTP服务器.服务器反过来连接用户本地端口. 被动模式解决从服务器到客户端数据端口的入口反向连接被防火墙过滤掉 ...

  5. .net程序员面试小结(内附一些面试题和答案)

    今天下午去面试,面试官和HR小姐姐都很好,没有做面试题,用聊天的方式来交流技术,整个过程很轻松,从中也学到了很多知识. 下面就来总结一下面试过程. 一.深刻了解自己的简历 无论是HR还是技术面试人,首 ...

  6. Android程序员学WEB前端(5)-HTML(5)-框架集-Sublime

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/76576279 觉得博文有用,请点赞,请评论,请关注,谢谢!~ 框架集: index7. ...

  7. JAVA程序员面试宝典

    程序员面试之葵花宝典 面向对象的特征有哪些方面    1. 抽象:抽象就是忽略一个主题中与当前目标2. 无关的那些方面,3. 以便更充分地注意与当前目标4. 有关的方面.抽象并不5. 打算了解全部问题 ...

  8. Java程序员面试之葵花宝典

    程序员面试之葵花宝典 1.面向对象的特征有哪些方面   抽象:抽象就是忽略一个主题中与当前目标 无关的那些方面, 以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而 只是选择其中的一部 ...

  9. SOHO 程序员

    SOHO 程序员:从事程序开发.维护的家居办公人员. 一.自由程序员 SOHO程序员代表一种自由.弹性而新型的工作方式.SOHO,代表一种新经济.新概念. 是一些热爱软件开发的一族. SOHO程序员 ...

随机推荐

  1. 读书笔记1: 资源地址—通用资源的标识符(URI)

    例子: https://msdn.microsoft.com/zh-cn/library/system.uri(v=vs.110).aspx 解释:协议://主机[:端口号]/绝对路径[参数] 对应的 ...

  2. mvc伪静态<四> 伪静态后静态页面或者引用的css和图片失效

    引用的css和图片失效的解决办法 把样式引用文件的相对路径改成绝对路径就可以了 比如原先的引用路径为:<link href="~/Content/css/style.css" ...

  3. linux sort 命令详解

    sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始! 1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按AS ...

  4. Octopus系列之开发过程各个技术点

    自定义了页面周期 使用唯一的一个VelocityEngine全局的静态实例,优化了小泥鳅blog中每次请求都要创建VelocityEngine实例对象,减少了对象的开销 通过UA判断请求来自的设备,从 ...

  5. 如何在 Ubuntu 15.04 系统中安装 Logwatch

    大家好,今天我们会讲述在 Ubuntu 15.04 操作系统上如何安装 Logwatch 软件,它也可以在各种 Linux 系统和类 Unix 系统上安装.Logwatch 是一款可定制的日志分析和日 ...

  6. HTTPS是如何保证连接安全,你知道吗?

    HTTPS协议的工作原理是什么?”这是我在数天前工作项目中需要解决的问题. 作为一名Web开发者,我当然知道 HTTPS 协议是保障用户敏感数据的好办法,但并不知道这种协议的内在工作机制. 它怎么保护 ...

  7. POJ 3094 Quicksum 难度:0

    http://poj.org/problem?id=3094 #include<iostream> #include <string> using namespace std; ...

  8. ubuntu 14.04 上安装有道词典

    Ubuntu 14.04用户在安装前要更新系统,即update&dist-upgrade. 下载地址:32/64bits http://codown.youdao.com/cidian/lin ...

  9. BPM与OA,选择好烦恼!

    企业在信息化建设的过程中 难免遭遇BPM和OA之争, 难!难!难! 选择BPM吧, 有人觉得你“打肿脸充胖子”: 选择OA嘛, “行业大哥”们已经在BPM的路上越走越远… 其实, OA和BPM从某种意 ...

  10. Dom事件初步了解

    1.事件流 事件流可以分为两种:事件冒泡和事件捕获 1. 事件冒泡就是从目标元素一直冒泡到根元素html(IE和DOM浏览器都有) 2. 事件捕获就是从根元素到目标元素(DOM浏览器支持) 2.事件处 ...