ios面试题(1)

1.用objective-c写一个插入法排序

 

2.写一个NSString类的实现

+ (id)initWithCString:(const char*)nullTerminatedCString encoding:(NSStringEncoding)encoding;

+ (id)initWithCString:(const char*)nullTerminatedCString encoding:(NSStringEncoding)encoding{

       NSString*obj;

       obj= [self allocWithZone: NSDefaultMallocZone()];

       obj= [obj initWIthCString: nullTerminatedCString encoding: encoding];

       returnAUTORELEASE(obj);

}

3.写一个委托的interface

#import <Foundation/Foundation.h>

@protocol MyDelegate;//声明

@interface MyClass : NSObject

{

    id <MyDelegate>delegate;

}

@end

@protocol MyDelegate//委托方法

- (void)didJobs:(NSArray *)args;

@end

4.obj-c有私有方法么?私有变量呢

在Objective-C有私有方法,有静态方法和实例方法。也有私有变量。

@interface MyClass (Private)

- (void)testPrivate;

@end

objective-c - 类里面的方法只有两种, 静态方法和实例方法. 这似乎就不是完整的面向对象了,按照OO的原则就是一个对象只暴露有用的东西. 如果没有了私有方法的话, 对于一些小范围的代码重用就不那么顺手了. 在类里面声名一个私有方法

@interface Controller : NSObject {NSString *something; }

+ (void)thisIsAStaticMethod;

- (void)thisIsAnInstanceMethod;

@end

@interface Controller (private) -

(void)thisIsAPrivateMethod;

@end

@private可以用来修饰私有变量

在Objective‐C中,所有实例变量默认都是私有的,所有实例方法默认都是公有的

 

5.#import跟#include的区别?

预编译指令Objective-C:#import   C,C++:#include   #import由gcc编译器支持

在 Objective-C 中,#import 被当成 #include 指令的改良版本来使用。除此之外,#import 确定一个文件只能被导入一次,这使你在递归包含中不会出现问题。

使用哪一个还是由你来决定。一般来说,在导入 Objective-C 头文件的时候使用 #import,包含 C 头文件时使用 #include。比如:

#import <foundation /Foundation.h>

#include <asl .h>

#include <mach /mach.h>

#import比起#include的好处就是不会引起交叉编译

扩展:@class是用来做类引用的

@class就是告诉编译器有这么一个类,至于类的定义是啥不知道

@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import

举个例子说明:

在ClassA.h中

#import ClassB.h 相当于#include整个.h头文件。如果有很多.m文件#importClassA.h,那么编译的时候这些文件也会#import ClassB.h增加了没必要的#import,浪费编译时间。在大型软件中,减少.h文件中的include是非常重要的。

如果只是@class ClassB 那就没有include ClassB.h。仅需要在需要用到ClassB的ClassA.m文件中#import ClassB.h

@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import
而#import比起#include的好处就是不会引起重复包含

6.请写出你对MVC模式的理解

答:MVC是一种设计模式,考虑三种对象:模型对象、视图对象和控制器对象。模型对象负责应用程序的数据和定义操作数据的逻辑;视图对象知道如何显示应用程序的模型数据;控制器对象是M与V之间的协调者。实现了功能模块和显示模块的分离,同时它还提高了应用系统的可维护性、可扩展性、可移植性和组件的可复用性。

7.什么是键-值,键路径是什么

答:模型的性质是通过一个简单的键(通常是个字符串)来指定的。视图和控制器通过键来查找相应的属性值。在一个给定的实体中,同一个属性的所有值具有相同的数据类型。键-值编码技术用于进行这样的查找—它是一种间接访问对象属性的机制。

键路径是一个由用点作分隔符的键组成的字符串,用于指定一个连接在一起的对象性质序列。第一个键的性质是由先前的性质决定的,接下来每个键的值也是相对于其前面的性质。键路径使您可以以独立于模型实现的方式指定相关对象的性质。通过键路径,您可以指定对象图中的一个任意深度的路径,使其指向相关对象的特定属性。

许多编程技术都基于间接机制,不是OC特性,而是Cocoa提供的一种特性,KVC是一种间接更改对象状态的方式,其实现方法是使用字符串描述要更改的对象状态部分。

除了通过键设置值外,键值编码还支持指定键路径,像文件系统路径一样,可以遵循一系列关系来指定该路径。

Forexample, the key path address.streetwould get the value of the address propertyfrom the receiving object, and then determine the street property relative tothe address object.

8.c和obj-c如何混用

1)obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码,处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj- c的代码,因为cpp只是cpp
2) 在mm文件中混用cpp直接使用即可,所以obj-c混cpp不是问题
3)在cpp中混用obj- c其实就是使用obj-c编写的模块是我们想要的。
如果模块以类实现,那么要按照cpp class的标准写类的定义,头文件中不能出现obj-c的东西,包括#import cocoa的。实现文件中,即类的实现代码中可以使用obj-c的东西,可以import,只是后缀是mm。
如果模块以函数实现,那么头文件要按 c的格式声明函数,实现文件中,c++函数内部可以用obj-c,但后缀还是mm或m。
总结:只要cpp文件和cpp include的文件中不包含obj-c的东西就可以用了,cpp混用obj-c的关键是使用接口,而不能直接使用实现代码,实际上cpp混用的是 obj-c编译后的o文件,这个东西其实是无差别的,所以可以用。obj-c的编译器支持cpp.

9.什么是目标-动作机制

目标是动作消息的接收者。一个控件,或者更为常见的是它的单元,以插座变量(参 见"插座变量"部分)
的形式保有其动作消息的目标。动作是控件发送给目标的消息,或者从目标的角度看,它是目标为了响应动作而实现 的方法。程序需要某些机制来进行事件和指令的翻译。这个机制就是目标-动作机制

10.请列举你熟悉cocoa touch框架(至少三个)

答:Core Animation 通过 Core Animation,您就可以通过一个基于组合独立图层的简单的编程模型来创建丰富的用户体验。 Core Audio Core Audio 是播放,处理和录制音频的专业技术,能够轻松为您的应用程序添加强大的音频功能。 Core Data 提供了一个面向对象的数据管理解决方案,它易于使用和理解,甚至可处理任何应用或大或小的数据模型。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值