博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios技术面试题
阅读量:6382 次
发布时间:2019-06-23

本文共 4803 字,大约阅读时间需要 16 分钟。

1.Difference between shallow copy and deep copy?

浅复制 只拷贝地址 不拷贝地址指向的对象

深复制 拷贝地址 并且指向拷贝的新对象

2.What is advantage of categories? What is difference between implementing a category and inheritance?

 

categories: 在不影响或修改原来的类别或模组的情况下去修改原有的功能,增加新的功能

3.Difference between categories and extensions?

 

categories: 在不影响或修改原来的类别或模组的情况下去修改原有的功能,增加新的功能 

4.Difference between protocol in objective c and interfaces in java?

 

暂时觉得它们是一样的 protocol 可以被继承 interfaces 不可以

在java 中的interfaces 在 objective-c 中就是 protocol

在java 中的 class 在 objective-c 中就是 interface

5.What are KVO and KVC?

 

转自 

 

一个对象拥有某些属性。比如说,一个 Person 对象有一个 name 和一个 address 属性。以 KVC 说法,Person 对象分别有一个 value 对应他的 name 和 address 的 key。 key 只是一个字符串,它对应的值可以是任意类型的对象。从最基础的层次上看,KVC 有两个方法:一个是设置 key 的值,另一个是获取 key 的值。如下面的例子: 

 

 

Java代码
  
  1. void changeName(Person *p, NSString *newName)  
  2. {  
  3.    
  4.     // using the KVC accessor (getter) method  
  5.     NSString *originalName = [p valueForKey:@"name"];  
  6.    
  7.     // using the KVC  accessor (setter) method.  
  8.     [p setValue:newName forKey:@"name"];  
  9.    
  10.     NSLog(@"Changed %@'s name to: %@", originalName, newName);  
  11.    
  12. }  

  现在,如果 Person 有另外一个 key 配偶(spouse),spouse 的 key 值是另一个 Person 对象,用 KVC 可以这样写:

 

Java代码
  
  1. void logMarriage(Person *p)  
  2. {  
  3.    
  4.     // just using the accessor again, same as example above  
  5.     NSString *personsName = [p valueForKey:@"name"];  
  6.    
  7.     // this line is different, because it is using  
  8.     // a "key path" instead of a normal "key"  
  9.     NSString *spousesName = [p valueForKeyPath:@"spouse.name"];  
  10.    
  11.     NSLog(@"%@ is happily married to %@", personsName, spousesName);  
  12.    
  13. }  

 Key-Value Observing (KVO) 建立在 KVC 之上,它能够观察一个对象的 KVC key path 值的变化。举个例子,用代码观察一个 person 对象的 address 变化,以下是实现的三个方法:

  • watchPersonForChangeOfAddress: 实现观察
  • observeValueForKeyPath:ofObject:change:context: 在被观察的 key path 的值变化时调用。
  • dealloc 停止观察static NSString *const KVO_CONTEXT_ADDRESS_CHANGED = @"KVO_CONTEXT_ADDRESS_CHANGED"
    Java代码
      
    1.    
    2. @implementation PersonWatcher  
    3.    
    4. -(void) watchPersonForChangeOfAddress:(Person *)p  
    5. {  
    6.    
    7.     // this begins the observing  
    8.     [p addObserver:self  
    9.         forKeyPath:@"address"  
    10.            options:0  
    11.            context:KVO_CONTEXT_ADDRESS_CHANGED];  
    12.    
    13.     // keep a record of all the people being observed,  
    14.     // because we need to stop observing them in dealloc  
    15.     [m_observedPeople addObject:p];  
    16. }  
    17.    
    18. // whenever an observed key path changes, this method will be called  
    19. - (void)observeValueForKeyPath:(NSString *)keyPath  
    20.                       ofObject:(id)object  
    21.                         change:(NSDictionary *)change  
    22.                        context:(void *)context  
    23.    
    24. {  
    25.     // use the context to make sure this is a change in the address,  
    26.     // because we may also be observing other things  
    27.     if(context == KVO_CONTEXT_ADDRESS_CHANGED) {  
    28.         NSString *name = [object valueForKey:@"name"];  
    29.         NSString *address = [object valueForKey:@"address"];  
    30.         NSLog(@"%@ has a new address: %@", name, address);  
    31.     }  
    32. }  
    33.    
    34. -(void) dealloc;  
    35. {  
    36.    
    37.     // must stop observing everything before this object is  
    38.     // deallocated, otherwise it will cause crashes  
    39.     for(Person *p in m_observedPeople){  
    40.         [p removeObserver:self forKeyPath:@"address"];  
    41.     }  
    42.    
    43.     [m_observedPeople release];  
    44.     m_observedPeople = nil;  
    45.    
    46.     [super dealloc];  
    47.    
    48. }  
    49.    
    50. -(id) init;  
    51. {  
    52.     if(self = [super init]){  
    53.         m_observedPeople = [NSMutableArray new];  
    54.     }  
    55.    
    56.     return self;  
    57. }  
    58.    
    59. @end  
      这就是 KVO 的作用,它通过 key path 观察对象的值,当值发生变化的时候会收到通知。

6.What is purpose of delegates?
7.What are mutable and immutable types in Objective C?
8.When we call objective c is runtime language what does it mean?
9.what is difference between NSNotification and protocol?
10.What is push notification?
11.Polymorphism?
12.Singleton?

单例

13.What is responder chain?
14.Difference between frame and bounds?
15.Difference between method and selector?
16.Is there any garbage collection mechanism in Objective C.?
17.NSOperation queue?
18.What is lazy loading?
19.Can we use two tableview controllers on one viewcontroller?
20.Can we use one tableview with two different datasources? How you will achieve this?
21.What is advantage of using RESTful webservices?
22.When to use NSMutableArray and when to use NSArray?
23.What is the difference between REST and SOAP?
24.Give us example of what are delegate methods and what are data source methods of uitableview.
25.How many autorelease you can create in your application? Is there any limit?
26.If we don’t create any autorelease pool in our application then is there any autorelease pool already provided to us?
27.When you will create an autorelease pool in your application?
28.When retain count increase?
29.Difference between copy and assign in objective c?
30.What are commonly used NSObject class methods?
31.What is convenience constructor?
32.How to design universal application in Xcode?
33.What is keyword atomic in Objective C?
34.What are UIView animations?
35.How can you store data in iPhone applications?
36.What is coredata?
37.What is NSManagedObject model?
38.What is NSManagedobjectContext?
39.What is predicate?
40.What kind of persistence store we can use with coredata?

转载于:https://www.cnblogs.com/lovewx/p/3963950.html

你可能感兴趣的文章
Oracle study之--Oracle 基于时间模型的优化
查看>>
扩展GridView控件(11) - 合并指定列的相邻且内容相同的单元格
查看>>
Python C :ctypes库
查看>>
Android双击退出
查看>>
运维自动化浅谈
查看>>
debian 6.0&¢os6.0部署socket5
查看>>
在Windows 10中启用客户端Hyper-V
查看>>
Windows 8 消费者预览版体验
查看>>
RedHat5.2下Linux Oracle 10g ASM 安装详细实录-第三篇-利用dbca创建oracle数据库
查看>>
QTP中VBS脚本下FSO、WSH的应用(一)
查看>>
CSS选择器 类选择器 .classA.classB 和.classA .ClassB的区别
查看>>
c#中数组类型存放位置
查看>>
Server 2008 新组策略在XP中的应用
查看>>
Qt核心剖析:信息隐藏(1)
查看>>
JPDA 架构研究17 - JDI概览
查看>>
常用API-String、包装类、System
查看>>
ZooKeeper典型使用场景一览
查看>>
Windows7 Native Boot流程笔记
查看>>
认识CSS3系列--圆角属性border-radius
查看>>
WCF简单教程(10) Ajax调用
查看>>