为什么很多内置类如uitableviewcontrol的ios delegate assign属性都是assign而不是retain

iOS面试题总
1.简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic,atomic,strong,weak属性的作用?
答:OC中内存管理机制应该就是引用计数的增减吧,retainCount为0时释放该内存。
retain对应的是release,内存的释放用release。
alloc对应的是dealloc,内存的销毁用dealloc。
& &&readwrite此标记说明属性会被当成读写的,这也是默认属性。
readonly此标记说明属性只可以读,也就是不能设置,可以获取。
assign不会使引用计数加1,也就是直接赋值。
retain会使引用计数加1。
copy建立一个索引计数为1的对象,在赋值时使用传入值的一份拷贝。
&&nonatomic:非原子性访问,多线程并发访问会提高性能。
& & atomic:原子性访问。
strong:打开ARC时才会使用,相当于retain。
weak:打开ARC时才会使用,相当于assign,可以把对应的指针变量置为nil。
2.类变量的@protected,@private,@public,@package,声明各有什么含义?
答:@protected
该类和所有子类中的方法可以直接访问这样的变量。
& & @private
该类中的方法可以访问,子类不可以访问。
& & @public &
可以被所有的类访问
& & @package
本包内使用,跨包不可以
3.线程是什么?进程是什么?二者有什么区别和联系?
答:线程,有时称为轻量级进程,是被系统独立调度和CPU的基本运行单位。
&进程是操作系统中可以并行工作的基本单位。
& 一个应用程序里至少有一个进程,一个进程里至少有一个线程。
4.谈谈你对多线程开发的理解?iOS中有几种实现多线程的方法?
答:在一个进程中有多个线程,每个线程有自己单独的任务
优点效率快 &
缺点不安全,耗费资源
& & 有三种
&&第一种,使用@synchronized(self)
第二种,使用GCD
第三种,使用NSOperationQueue
5.线程同步和异步的区别?IOS中如何实现多线程的同步?
答:一个进程启动的多个不相干线程,它们相互之间关系为异步。
同步的话指的是多线程同时操作一个数据 这个时候需要对数据添加保护 这个保护就是线程的同步。
用GCD中的串行队列来解释多线程的同步,也就是队列中的任务为串行,它们各自对相邻的任务有依赖性,如果任务1不完成,那么任务2就不会开始,这就是同步
6.假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,既上述字符串处理之后的输出结果为:aabcd
NSMutableString *str = [[NSMutableString alloc]initWithFormat:@"aabcad"];
NSMutableArray *marry = [[NSMutableArray alloc]init];
& for (int i = 0; i & str.length - 1; i++)
& & & unsigned
char a = [str characterAtIndex:i];
& & & for (int j
= i + 1; j & str. j++) {
& & unsigned char b = [str
characterAtIndex:j];
& & if (a == b) {
& if (j == i + 1) {
&[marry addObject:[NSString&stringWithFormat:@"%d",j]];
for (int i = marry.count - 1; i &
& & & NSInteger
num = [[marry objectAtIndex:i]intValue];
& & & [str
deleteCharactersInRange:NSMakeRange(num, 1)];
7.获取一台设备唯一标示的方法有哪些?
答:1.UDID
3.MAC ADDRESS&
4.OPEN UDID
5.广告标识符
6.Vindor标示符
ios7之后用的时keychain(钥匙串)
8.ios类是否可以多继承?如果没有,那可以用其他方法实现吗?简述实现过程。
用catogory、extension来实现
实现过程我会在ios复习中提到
9.堆和栈的区别?
答:堆需要用户手动释放内存,而栈则是编译器自动释放内存
10.ios本地数据存储都有哪几种方式?
答:1. &NSKeyedArchiver(加密形式)&&&&
&NSUserDefaults
&3. &Write写入方式
&4. &SQLite3
11.写出方法获取ios内存使用情况。
12.深拷贝和浅拷贝的理解?
答:对一个实例进行深拷贝时当前类需要实现NSCopying协议。
浅拷贝是复制出来一个跟原对象是同一地址的对象,而深拷贝则是复制出来一个跟源对象不同地址的对象,改变原对象,对新对象没有影响。
13.怎样实现一个singleton的类。
在复习中也有提到
14.什么是安全释放?
答:把对象指针置为nil,再对其释放。
15.RunLoop是什么?
16.什么是序列化和反序列化,可以用来做什么?如何在OC中实现复杂对象的存储?
答:把对象转换为字节序列的过程称为对象的序列化&
把字节序列恢复为对象的过程称为对象的反序列化
将对象写到文件或者数据库里,并且可以读取出来
遵循NSCoding协议,来实现复杂对象的存储
实现该协议后就可以对其进行打包或者解包,然后转化为NSData
17.写一个标准宏MIN,这个宏输入两个参数并返回较小的一个?
答:#define MIN((A),(B)) ((A(A:B))
延展问题:写宏的时候要注意些什么问题呢?
函数宏后面的参数都要用括号单独括起来,函数名大写
#define A 20
18.iphone os 有没有垃圾回收机制?简单阐述一下OC内存管理。
答:没有垃圾回收
内存管理同1题
19.简述应用程序按Home键进入后台时的生命周期,以及从后台回到前台时的生命周期?
答:前者进行的方法有
- (void)applicationWillResignActive:(UIApplication *)application
- (void)applicationDidEnterBackground:(UIApplication *)application
& & & 后者进行的方法有
& & &&- (void)applicationWillEnterForeground:(UIApplication *)application
& & &- (void)applicationWillResignActive:(UIApplication *)application
20.ViewController 的 alloc,loadView,ViewDidLoad,ViewWillAppear,ViewDidUnload,dealloc,init分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?
答:alloc申请内存时调用
loadView加载视图时调用
ViewDidLoad视图已经加载后调用
ViewWillAppear视图将要出现时调用
ViewDidUnload视图已经加载但没有加载出来调用
dealloc销毁该视图时调用
init视图初始化时候调用
21.描述应用程序的启动顺序。
1. 程序入口main函数创建UIApplication实例和UIApplication代理实例。
在UIApplication代理实例中重写启动方法,设置根ViewController。
在第一ViewController中添加控件,实现应用程序界面。
22.为什么很多内置类如UITableViewControl的delegate属性都是assign而不是retain?请举例说明。
避免循环引用
比如:对象A创建并引用到了对象B,对象B创建并引用到了对象C,对象C创建并引用到了对象B,这个时候B的引用计数是2,而C的引用计数是1,当A不用B的时候,就释放了B的所有权,这个时候C还引用对象B,所有B不会释放,引用计数为1;因为B也引用着对象C,B不释放,那么C就不会被释放,所有它们的引用计数都为1,并且永远不会被释放,所以形成了循环引用。
23.使用UITableView时候必须要实现的几种方法?
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexP
24.写一个便利构造器。
- (id)studentWithName:(NSString *)name andAge:(NSInter)age{
MyView *view = [[MyView alloc]initWithName:name andAge:age];
return [view autorelease];
25.UIImage初始化一张图片有几种方法?简述各自的优缺点。
imageNamed:系统会先检查系统缓存中是否有该名字的Image,如果有的话,则直接返回,如果没有,则先加载图像到缓存,然后再返回。
initWithContentsOfFile:系统不会检查系统缓存,而直接从文件系统中加载并返回。
imageWithCGImage:scale:orientation 当scale=1的时候图像为原始大小,orientation制定绘制图像的方向。
1.回答person的retainCount值,并解释为什么?
Person *per = [[Person alloc]init];
self.person =
答:1或者2,alloc+1,assign+0,retain+1
2.这段代码有什么问题吗?
@implementation Person
-(void)setAge:(int)newAge{self.age = newA}
答:死循环
3.这段代码有什么问题,如何修改
for(int i = 0;i
NSString *string = @"Abc";
string = [string
lowercaseString];
string = [string
stringByAppendingString:@"xyz"];
NSLog(@"%@",string);
答:在循环里加入自动释放池@autoreleasepool{};
4.截取字符串"20 |
"中,"|"字符前面和后面的数据,分别输出它们。
答:[string
componentsSeparatedByString:@"|"]
5.用obj-c写一个冒泡程序。
&&NSMutableArray *array =
[NSMutableArray arrayWithObjects:@"15",@"12",@"5",@"8", nil];
& & for (int i = 0; i &
array.count - 1; i++) {
& int a = [array[i]intValue];
& for (int j = i + 1; j & array. j++)
& & & int b =
[array[j]intValue];
& & & if (a &
& & [array
exchangeObjectAtIndex:i withObjectAtIndex:j];
& & for (int i = 0; i &
array. i++) {
& NSLog(@"%@",array[i]);
6.简述你对UIView,UIWindow和CALayer的理解。
答:UIWindow是应用的窗口
UIView是创建窗口中的一个视图,可以响应交互事件
CALayer不可以响应事件
7.写一个完整的代理,包括声明,实现。
答:在具体问题模块会单独介绍
8.分析json、xml的区别?json、xml解析方式的底层是如何处理的?
答:json数据小,易解析,不复杂 &
&xml数据较大,比较复杂
json中以key/value形式保存,大多数是字典数组模式
& xml中则是&&
9.ViewController的didReceiveMemoryWarning是在什么时候被调用的?默认的操作是什么?
答:当应用程序的内存使用接近系统的最大内存使用时,应用会向系统发送内存警告,这时候系统会调用方法向所有的ViewController发送内存警告
10.面向对象的三大特征,并作简单的介绍。
答:封装、继承、多态
封装:将一个实例的所有属性封装到某个类中
继承:子类继承父类所有方法和属性
多态:父类指针指向子类对象
11.重写一个NSString类型的,retain方式声明name属性的setter和getter方法。
(void)setName:(NSString *)name{
if(_name != name){
- (NSString
return [[_name
retain]autorelease];
12.简述NotificationCenter、KVC、KVO、Delegate?并说明它们之间的区别?
答:消息中心,消息通知;
利用键-值间接访问类中的某个属性
利用键-路径间接访问类中的某个属性,也称观察者模式
代理,多用于两个类之间的传值
13.what is lazy loading?
答:延时加载,按需加载。
14.什么是Protocol?什么是代理?写一个委托的interface?委托的property声明用什么属性?为什么?
答:协议,用来在两个ViewController交互时所定的协议。
& & 代理,第三方中介。
& & @protocol PersonDelegate
(void)setN
& & @property (nonatomic,assign)
& & 防止循环引用
15.分别描述类目(categories)和延展(extensions)是什么?以及两者的区别?继承和类目的实现中有何区别?为什么Category只能为对象添加方法,却不能添加成员变量?
答:extensions可以声明属性 &
不用实现方法;
category可以为当前类生成私有方法,子类不能直接调用;
但是通过继承,子类可以调用父类所有的属性和方法;
& 回头补上
16.Objective-C
有私有方法吗?私有变量呢?如果没有的话,有没有什么代替的方法?
答:没有私有方法,有私有变量
& 私有方法可以用 category 和 extension
17.#import、#include和@class有什么区别
答:有时间补
18.谈谈你对MVC的理解?为什么要用MVC?在Cocoa中MVC是怎么实现的?你还熟悉其他的OC设计模式或别的设计模式吗?
答:M----model &
&V----view &
&C----controller
MVC可以让我们的项目框架更加清晰,同时可以让1个controller对应多个model,改代码的时候也方便;
Cocoa中,回头补
单例模式,Delegate模式,KVC模式,消息通知模式,Target/Action模式
19.如检测系统键盘的弹出
答:[[NSNotificationCenter
defaultCenter]addObserver:self &
selector:@selector()
&name:UIKeyboardWillShowNotification
&object:nil];
20.举出5个以上你所熟悉的ios
sdk库有哪些和第三方库有哪些?
答:1.AFNetworking
2.ASIHttpRequest
3.shareKit
4.FMDatebase
5.MMDrawerController
回头再研究一些单独列出来
21.如何将产品进行多语言发布?
答:国际化语言改成English
22.如何将敏感字变成**
NSMutableArray *array =
[[NSMutableArray alloc]init];//本地敏感字库
& NSString *a = @"敏感字";//本地敏感字库里存的某个敏感字
& NSString *b = @"我";
& [array addObject:a];
& [array addObject:b];
& //下面是方法
& NSMutableString *s = [[NSMutableString
alloc]initWithString:@"我是敏感字"];//要判断的字符串
& for (int i = 0; i & array. i++)
& & & NSString
*minganzi = array[i];
NSMutableString *replaceString = [[NSMutableString
alloc]init];
& & & for (int j
= 0; j & s.length - a.length + 1; j++) {
& & range.length =
& & range.location =
& & if ([[s
substringWithRange:range] isEqualToString:minganzi]) {
& for (int k = 0; k & range. k++)
[replaceString appendString:@"*"];
& [s replaceCharactersInRange:range
withString:replaceString];
& NSLog(@"%@",s);
23.objc中的减号和加号代表什么?
答:实例对象方法 &
24.单例目的是什么,并写出一个?
答:节省内存
& & 回头用GCD写一个
25.说说响应链
答:nextResponse &
View找它的Controller
1.我们说的OC时动态运行时语言是什么意思?什么是动态识别,动态绑定?
答:动态类型 &-- &id &
& 动态绑定 &--
&@selector() &
2.分别描述内存管理要点、autorelease、release、NSAutoreleasePool?并说明autorelease是什么时候被release的?简述什么时候由你负责释放对象,什么时候不由你释放?[NSAutoreleasePool
release] 和 [NSAutoreleasePool drain]有什么区别?
3.说说下面关键词在内存管理的作用:alloc、init、copy、retain、release、autorelease、dealloc、retain
4.drawRect和layouSubviews
scoker通信的区别?socker连接相关库,TCP,UDP的区别?
6.什么是键值、键路径是什么?
答:KVC & setValue:@""
forKey:@""
& KVO & setValue:@""
forKeyPath@""
7.声明一个静态方法和一个实例方法?
答:类方法与实例方法
+(id)personWithName:(NSString
Person *person = [[Person
alloc]initWithName:name];
return [person
autorelease];&
- (id)initWithName:(NSString
self = [super init];
self.name =
8.什么是push?远程推送?
9.init和initWithObject区别(语法)?
答:后者给属性值
10.请写出代码,用block来取代上例中的protocol,并比较两种方法的优势。实际应用部分?请写出代码,用blocks取代协议或回调方法。
答:int (^myBlock)(int) = ^(int a){return
回头在具体分析模块中总结
11.你做iphone开发时候,有哪些传值方式,view和view之间是如何传值的?
答:属性,Delegate,单例,消息通知,Block
12.给定的一个字符串,判断字符串中是否含有png,有就删除它?
13.对于语句NSString* testObject = [[NSData
alloc]init];testObject在编译时和运行时分别是什么类型的对象?
答:编译时是NSString,运行时是NSData
14.OC中是所有对象间的交互是如何实现的?
答:消息机制
15.目标-动作机制
答:Target - action
16.for(int index = 0; index &
NSString *tempStr =
@"tempStr";
NSLog(tempStr);
NSNumber *tempNumber = [NSNumber
numberWithInt:2];
NSLog(tempNumber);
这段代码有什么问题?会不会造成内存泄露(多线程)?在内存紧张的设备上做大循环时自动释放池是写在循环内好还是循环外号?为什么?
17.描述上拉加载、下拉刷新的实现机制?
18.什么是沙盒?沙盒包含哪些文件,描述每个文件的使用场景。如何获取这些文件的路径?如何获取应用程序包中文件的路径?
答:保护程序安全性
& & Documents
& & library
19.介绍一下XMPP?有什么优缺点?
答:回头尝试
20.谈谈对性能优化的看法,如何做?
答:根据用户的需求做优化
21.应用程序如何省电?
答:先关闭所有跟网络有关的选项,代码里回头补
22.写一个递归方法:计算N的阶乘,然后将计算结果进行存储。以便应用退出后下次启动可直接获取该值。
@property (nonatomic,assign)
在初始化方法中初始_sum =
(int)cheng:(int)n{
_sum = _sum *
[[NSUserDefaults
standerUserDefaults]setObject: [NSString
stringWithFormat:@"%d",_sum] forKey:@"cheng"];
23.NSArray 和 NSMutableArray
的区别,多线程操作哪个更安全?
答:不可变数组更安全
24.当前有一个数组,里面有若干重复的数据,如何去除重复的数据?(会几个写几个)
答:1,2,3,4,5,6,7,8,9,10 …………
将数组中所有数字去出来,存到新数组下标为对应数字的位置
25.isKindOfClass、isMemberOfClass
作用分别是什么?
答:前者判断是否属于该类及该类祖宗类,后者只判断是否属于该类
26.写出下面程序段的输出结果
NSDictionary *dict = [NSDictionary
dictionaryWithObject:@"a string value"
forKey:@"akey"];
NSLog(@"%@",[dict
objectForKey:@"akey"]);
[dict release];
27.请写出以下代码的执行结果
NSString *name = [[NSString
alloc]init];
name = @"Habb";
[name release];
答:申请内存没有用到
28.请分别写出SEL、id的意思?
答:动态绑定方法 &
29.iPhone上,不能被应用程序直接调用的系统程序是什么?
30.以.mm为拓展名的文件里,可以包含的代码有哪些?c和obj-c如何混用?
答:C、Object-C、C++
31.说说如何进行后台运行程序?
32.sizeof 和 strlen 的区别和联系?
答:前者算内存 &
&后者判断字符串长度
<font COLOR="#.sprintf,strcpy,memcpy的功能?使用上要由哪些要注意的地方。
答:sprintf:将某类型转换成字符串类型
strcpy:拷贝某字符串,长度要相等,考虑'/0'
memcpy:拷贝内存
34.自己写函数,实现strlen功能。
int sl(const char *s)
& & int length = 0;
& & while (*s!='\0')
& length++;
35.写一个代码片段输入一个字符串“32”,输出一个NSDate类型的对象、打印该对象输出
15:28:32
NSDateFormatter *formatter = [[NSDateFormatter
alloc]init];
[formatter
setDateFormat:@"yyyy-MM-dd:HH-mm-ss"];
NSLog(@"%@",[formatter stringWithDate:[NSDate
a: void test1()
char string[10];
char *str1 = "";
strcpy(string,str1);
b:void GetMemory(char **p,int
*p = (char *)malloc(num);
void Test(void)
char *str = NULL;
GetMemory(&str,100);
strcpy(str,"hello");
printf(str);
37.用变量a写出以下定义
a、一个整型数
b、一个指向整型数的指针
c、一个指向指针的指针,它指向的指针是指向一个整型数
d、一个有10个整型数的数组
e、一个有10个指针的数组,该指针是指向一个整型数的
f、一个指向有10个整型数数组的指针
g、一个指向函数的指针,该函数有一个整型参数,并返回一个整型数
今天先写到这里,明天继续!
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。2088人阅读
首先delegate要使用assign而不是retain,这个问题大家通过看iOS的api就可以了,最典型的是tabView里面的delegate和datasource都是用的assign。
一个对象没必要管理自己delegate的生命周期,或者说没必要拥有该对象,所以我们只要知道它的指针就可以了,用指针找到对象去调用方法,也就是委托实现的感觉。
或者我们换个角度,从内存管理方面也可以解释这个问题。delegate的生命周期不需要让该对象去控制,如果该对象对其使用retain很可能导致delegate所指向的对象无法正确的释放。
所有的引用计数系统,都存在循环应用的问题。例如下面的引用关系:
对象a创建并引用了对象b.对象b创建并引用了对象c.对象c创建并引用了对象b.
这时候b和c的引用计数分别是2和1。当a不再使用b,调用release释放对b的所有权,因为c还引用了b,所以b的引用计数为1,b不会被释放。b不释放,c的引用计数就是1,c也不会被释放。从此,b和c永远留在内存中。
这种情况,必须打断循环引用,通过其他规则来维护引用关系。比如,我们常见的delegate往往是assign方式的属性而不是retain方式的属性,赋&#20540;不会增加引用计数,就是为了防止delegation两端产生不必要的循环引用。如果一个UITableViewController 对象a通过retain获取了UITableView对象b的所有权,这个UITableView对象b的delegate又是a, 如果这个delegate是retain方式的,那基本上就没有机会释放这两个对象了。自己在设计使用delegate模式时,也要注意这点。
因为循环引用而产生的内存泄露也是Instrument无法发现的,所以要特别小心。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:603087次
积分:5108
积分:5108
排名:第2146名
原创:59篇
转载:22篇
评论:185条
(1)(2)(1)(1)(2)(4)(2)(4)(2)(4)(2)(1)(3)(13)(5)(2)(17)(15)ios应用开发Objective-C笔试题,IOS教程,IOS案例,IOS实例
本站中文域名:、 
        
     
 |  |  |  |  
     |     |     |   
您的位置: &&
&& ios应用开发Objective-C笔试题
ios应用开发Objective-C笔试题
  Objective-C笔试题是本文要介绍的内容,很
讲解写的答案&。大概有18个Objective-C问题供你参考学习,不多说,我们一同来看
详尽解答!
  1.Objective-C中,与alloc语义相反的
步骤是dealloc还是release?与retain语义相反的
步骤是dealloc还是release,为何?需求与alloc配对
步骤是dealloc还是release,为何?
  答:alloc与dealloc语意相反,alloc是
缔造变量,dealloc是
开释变量&。 retain 对应release,retain 保留一个对象&。调用之后,变量的计数加1&。兴许不是很显而易见,在这有例为证:-&(void)&setName&:&(NSString*)&name&{& &&&&&&[name&retain];& &&&&&&[myname&release];& &&&&&&myname&=&& &}&&
  我们来解释一下:
设计,消费者在调用这个函数的时候,他
留神了内存的治理,所以他小心的写了如下代码:NSString&*&newname&=&[[NSString&alloc]&initWithString:&@"John"];& &[aClass&setName:&newname];& &[newname&release];&&
  我们来看一看newname的计数是怎么
变迁的&。首先,它被alloc,count = 1;
而后,在setName中,它被retain, count = 2; 最终,消费者自己
开释newname,count = 1,myname指向了newname&。这也解释了为何需求调用[myname release]&。我们需求在给myname赋新值的时候,
开释掉以往老的变量&。retain 之后直接dealloc对象计数器没有
开释&。alloc 需求与release配对
使用,由于alloc 这个函数调用之后,变量的计数加1&。所以在调用alloc 之后,
定然要调用对应的release&。另外,在release一个变量之后,他的值
依旧有效,所以最好是后面紧接着再var = nil&。
  2.在一个对象的
  self.name = “object”;
name =”object”
  有什么不同吗?&
  答:self.name = "object"会调用对象的setName()
步骤,name = "object"会直接把object赋值给目前对象的name 属性&。
  [backcolor=transparent][backcolor=transparent]
  3.这段代码有什么问题吗:[backcolor=transparent]@implementation&Person& &[backcolor=transparent]-&(void)setAge:(int)newAge&{& &[backcolor=transparent]self.age&=&newAge;& &[backcolor=transparent]}& &[backcolor=transparent] &@end&&
  答:会进入死循环&。
  4.什么是retain count?
引用计数(ref count或者retain count)&。对象的内部
保留一个数字,
引用的次数&。例如,某个对象被两个指针所指向(
引用)那么它的retain count为2&。需求销毁对 象的时候,不直接调用dealloc,而是调用release&。release会 让retain count减1,惟独retain count等于0,系统才会调用dealloc真正销毁这个对象&。
  5.以下每行代码执行后,person对象的retain count分别是多少Person&*person&=&[[Person&alloc]&init];&count&1& &[person&retain];&count&2& &[person&release];count&1& &[person&release];retain&count&=&1;&&
  6.为何众多内置类如UITableViewController的delegate属性都是assign而不是retain的?
  答:会引起循环
  7.定义属性时,什么状况
使用copy,assign,和retain &。
  答:assign用于
方便数据类型,如NSInteger,double,bool,retain 和copy消费者对象,copy用于当 a指向一个对象,b也想指向同样的对象的时候,假如用assign,a假如
开释,再调用b会crash,假如用copy 的
模式,a和b各自有自己的内存,就
可以解决这个问题&。retain 会使计数器加一,也
可以解决assign的问题&。另外:atomic和nonatomic用来决定编译器生成的getter和setter是不是为原子操作&。在多线程环境下,原子操作是必要的,不然有可能引起
后果&。加了atomic,setter函数会变成下面这样:if&(property&!=&newValue)&{&& &&&&&&[property&release];&&&&&&& &&&&&&property&=&[newValue&retain];&& &&}&&&&
  8.的对象是在什么时候被release的?
  答:autorelease实际上只不过把对release的调用延迟了,关于每一个Autorelease,系统只不过把该Object放入了目前的Autorelease pool中,当该pool被
开释时,该pool中的全部Object会被调用Release&。关于每一个Runloop,系统会隐式
缔造一个Autorelease pool,这样全部的release pool会组成一个象CallStack一样的一个栈式
构造,在每一个Runloop
完毕时,目前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object(便是autorelease的对象)会被release&。那什么是一个Runloop呢?一个UI事件,Timer call, delegate call, 都会是一个新的Runloop&。那什么是一个Runloop呢?一个UI事件,Timer call, delegate call,都会是一个新的Runloop&。
  9.这段代码有什么问题,如何
批改for&(int&i&=&0;&i&&;&i++)& &{& &NSString&*string&=&@”Abc”;& &string&=&[string&lowercaseString];& &string&=&[string&stringByAppendingString:@"xyz"];& &NSLog(@“%@”,&string);& &}&&
  答:会内存泄露,for(int&i&=&0;&i;i++){& &NSAutoreleasePool&*&pool1&=&[[NSAutoreleasePool&alloc]&init];& &NSString&*string&=&@"Abc";& &string&=&[string&lowercaseString];& &string&=&[string&stringByAppendingString:@"xyz"];& &NSLog(@"%@",string);& &[pool1&drain];& &}&&
  10.autorelease和垃圾回收机制(gc)有什么关系?
  答:不懂
  11.IPhone OS有没有垃圾回收(gc)?
  12.什么是Notification?
视察者模式,controller向defaultNotificationCenter增加自己的notification,
其余类注册这个notification就
告诉,这些类
可以在收到
告诉时做自己的操作(多
视察者默许随机顺序发
视察者们,而且每个
视察者都要等目前的某个
视察者的操作做完
威力轮到他来操作,
可以用NotificationQueue的
反响顺序,也
可以在增加
视察者中设定反映
视察需求在viewDidUnload 跟dealloc中都要注销)&。参考链接:/blog//delegation-or-notification.html
  13.什么时候用delegate,什么时候用Notification?
  答:delegate针对one-to-one关系,而且reciever
可以返回值给sender,notification
可以针对one-to-one/many/none,reciever
无奈返回值给sender.所以,delegate用于sender
承受到reciever的某个
性能反馈值,notification用于
告诉多个object某个事件&。
  14.什么是KVC和KVO?
  答:KVC(Key-Value-Coding)内部的实现:一个对象在调用setValue的时候,(1)首先依据
步骤名找到运行
步骤的时候所需求的环境参数&。(2)他会从自己isa指针
联合环境参数,找到具体的
步骤实现的接口&。(3)再直接搜索得来的具体的
步骤实现&。KVO(Key-Value-Observing):当
视察者为一个对象的属性进行了注册,被
视察对象的isa指针被
批改的时候,isa指针就会指向一个之间类,而不是
实在的类&。所以isa指针其实不需求指向实例对象
实在的类&。所以我们的程序最好不要依赖于isa指针&。在调用类的
步骤的时候,最好要明确对象实例的类名&。
  15.Notification和KVO有什么不同?
  答:不晓得
  16.KVO在Objective-C中是怎么实现的?
  答:不晓得
  17.ViewController 的 loadView, viewDidLoad, viewDidUnload 分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?
  答:viewDidLoad在view 从nib文件初始化时调用,loadView在controller的view为nil时调用&。此
步骤在编程实现view时调用,view 操纵器默许会注册memory warning notification,当view controller的任何view 没有用的时候,viewDidUnload会被调用,在这里实现将retain 的view release,假如是retain的IBOutlet view 属性则不要在这里release,IBOutlet会负责release &。
  18.ViewController 的 didReceiveMemoryWarning 是在什么时候被调用的?默许的操作是什么?
  答:默许调用[super didReceiveMemoryWarning]&
  小结:深度解析Objective-C笔试题的内容介绍完了,
盼望本文对你有所协助!
  Objective-C笔试题是本文要介绍的内容,很
讲解写的答案&。大概有18个Objective-C问题供你参考学习,不多说,我们一同来看
详尽解答!
  1.Objective-C中,与alloc语义相反的
步骤是dealloc还是release?与retain语义相反的
步骤是dealloc还是release,为何?需求与alloc配对
步骤是dealloc还是release,为何?
  答:alloc与dealloc语意相反,alloc是
缔造变量,dealloc是
开释变量&。 retain 对应release,retain 保留一个对象&。调用之后,变量的计数加1&。兴许不是很显而易见,在这有例为证:-&(void)&setName&:&(NSString*)&name&{& &&&&&&[name&retain];& &&&&&&[myname&release];& &&&&&&myname&=&& &}&&
  我们来解释一下:
设计,消费者在调用这个函数的时候,他
留神了内存的治理,所以他小心的写了如下代码:NSString&*&newname&=&[[NSString&alloc]&initWithString:&@"John"];& &[aClass&setName:&newname];& &[newname&release];&&
  我们来看一看newname的计数是怎么
变迁的&。首先,它被alloc,count = 1;
而后,在setName中,它被retain, count = 2; 最终,消费者自己
开释newname,count = 1,myname指向了newname&。这也解释了为何需求调用[myname release]&。我们需求在给myname赋新值的时候,
开释掉以往老的变量&。retain 之后直接dealloc对象计数器没有
开释&。alloc 需求与release配对
使用,由于alloc 这个函数调用之后,变量的计数加1&。所以在调用alloc 之后,
定然要调用对应的release&。另外,在release一个变量之后,他的值
依旧有效,所以最好是后面紧接着再var = nil&。
  2.在一个对象的
  self.name = “object”;
name =”object”
  有什么不同吗?&
  答:self.name = "object"会调用对象的setName()
步骤,name = "object"会直接把object赋值给目前对象的name 属性&。
  [backcolor=transparent][backcolor=transparent]
  3.这段代码有什么问题吗:[backcolor=transparent]@implementation&Person& &[backcolor=transparent]-&(void)setAge:(int)newAge&{& &[backcolor=transparent]self.age&=&newAge;& &[backcolor=transparent]}& &[backcolor=transparent] &@end&&
  答:会进入死循环&。
  4.什么是retain count?
引用计数(ref count或者retain count)&。对象的内部
保留一个数字,
引用的次数&。例如,某个对象被两个指针所指向(
引用)那么它的retain count为2&。需求销毁对 象的时候,不直接调用dealloc,而是调用release&。release会 让retain count减1,惟独retain count等于0,系统才会调用dealloc真正销毁这个对象&。
  5.以下每行代码执行后,person对象的retain count分别是多少Person&*person&=&[[Person&alloc]&init];&count&1& &[person&retain];&count&2& &[person&release];count&1& &[person&release];retain&count&=&1;&&
  6.为何众多内置类如UITableViewController的delegate属性都是assign而不是retain的?
  答:会引起循环
  7.定义属性时,什么状况
使用copy,assign,和retain &。
  答:assign用于
方便数据类型,如NSInteger,double,bool,retain 和copy消费者对象,copy用于当 a指向一个对象,b也想指向同样的对象的时候,假如用assign,a假如
开释,再调用b会crash,假如用copy 的
模式,a和b各自有自己的内存,就
可以解决这个问题&。retain 会使计数器加一,也
可以解决assign的问题&。另外:atomic和nonatomic用来决定编译器生成的getter和setter是不是为原子操作&。在多线程环境下,原子操作是必要的,不然有可能引起
后果&。加了atomic,setter函数会变成下面这样:if&(property&!=&newValue)&{&& &&&&&&[property&release];&&&&&&& &&&&&&property&=&[newValue&retain];&& &&}&&&&
  8.的对象是在什么时候被release的?
  答:autorelease实际上只不过把对release的调用延迟了,关于每一个Autorelease,系统只不过把该Object放入了目前的Autorelease pool中,当该pool被
开释时,该pool中的全部Object会被调用Release&。关于每一个Runloop,系统会隐式
缔造一个Autorelease pool,这样全部的release pool会组成一个象CallStack一样的一个栈式
构造,在每一个Runloop
完毕时,目前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object(便是autorelease的对象)会被release&。那什么是一个Runloop呢?一个UI事件,Timer call, delegate call, 都会是一个新的Runloop&。那什么是一个Runloop呢?一个UI事件,Timer call, delegate call,都会是一个新的Runloop&。
  9.这段代码有什么问题,如何
批改for&(int&i&=&0;&i&&;&i++)& &{& &NSString&*string&=&@”Abc”;& &string&=&[string&lowercaseString];& &string&=&[string&stringByAppendingString:@"xyz"];& &NSLog(@“%@”,&string);& &}&&
  答:会内存泄露,for(int&i&=&0;&i;i++){& &NSAutoreleasePool&*&pool1&=&[[NSAutoreleasePool&alloc]&init];& &NSString&*string&=&@"Abc";& &string&=&[string&lowercaseString];& &string&=&[string&stringByAppendingString:@"xyz"];& &NSLog(@"%@",string);& &[pool1&drain];& &}&&
  10.autorelease和垃圾回收机制(gc)有什么关系?
  答:不懂
  11.IPhone OS有没有垃圾回收(gc)?
  12.什么是Notification?
视察者模式,controller向defaultNotificationCenter增加自己的notification,
其余类注册这个notification就
告诉,这些类
可以在收到
告诉时做自己的操作(多
视察者默许随机顺序发
视察者们,而且每个
视察者都要等目前的某个
视察者的操作做完
威力轮到他来操作,
可以用NotificationQueue的
反响顺序,也
可以在增加
视察者中设定反映
视察需求在viewDidUnload 跟dealloc中都要注销)&。参考链接:/blog//delegation-or-notification.html
  13.什么时候用delegate,什么时候用Notification?
  答:delegate针对one-to-one关系,而且reciever
可以返回值给sender,notification
可以针对one-to-one/many/none,reciever
无奈返回值给sender.所以,delegate用于sender
承受到reciever的某个
性能反馈值,notification用于
告诉多个object某个事件&。
  14.什么是KVC和KVO?
  答:KVC(Key-Value-Coding)内部的实现:一个对象在调用setValue的时候,(1)首先依据
步骤名找到运行
步骤的时候所需求的环境参数&。(2)他会从自己isa指针
联合环境参数,找到具体的
步骤实现的接口&。(3)再直接搜索得来的具体的
步骤实现&。KVO(Key-Value-Observing):当
视察者为一个对象的属性进行了注册,被
视察对象的isa指针被
批改的时候,isa指针就会指向一个之间类,而不是
实在的类&。所以isa指针其实不需求指向实例对象
实在的类&。所以我们的程序最好不要依赖于isa指针&。在调用类的
步骤的时候,最好要明确对象实例的类名&。
  15.Notification和KVO有什么不同?
  答:不晓得
  16.KVO在Objective-C中是怎么实现的?
  答:不晓得
  17.ViewController 的 loadView, viewDidLoad, viewDidUnload 分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?
  答:viewDidLoad在view 从nib文件初始化时调用,loadView在controller的view为nil时调用&。此
步骤在编程实现view时调用,view 操纵器默许会注册memory warning notification,当view controller的任何view 没有用的时候,viewDidUnload会被调用,在这里实现将retain 的view release,假如是retain的IBOutlet view 属性则不要在这里release,IBOutlet会负责release &。
  18.ViewController 的 didReceiveMemoryWarning 是在什么时候被调用的?默许的操作是什么?
  答:默许调用[super didReceiveMemoryWarning]&
  小结:深度解析Objective-C笔试题的内容介绍完了,
盼望本文对你有所协助!
Google搜索中
搜狗搜索中
在线教程导航
数据库开发
产品库推荐
| 站长工具:
All Rights Reserved.
珠江路在线版权所有
苏ICP备号 中文域名:
 |  | }

我要回帖

更多关于 uitableviewcell 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信