Objective-C面试题(精心整理的,附答案)

http://www.mianwww.com/html/2014/03/20372.html

1、objective-c 是所有对象间的交互是如何实现的?

在对象间交互中每个对象承担的角色不同,但总的来说无非就是”数据的发送者”或”数据的接收者”两种角色,我们可以通过代理去进行通信,或者通过观察者消息模式,blocks,appdelegagte

通过:代理协议”或者”通知中心”方式的实现能最大限度的降低两交互对象之间的耦合,不错的设计;

2、如何将产品进行多语言发布,开发?

xcode 对多语言支持比较好,除了h,m文件外所有其他东西都可以多语言

3、objective-c中是如何实现线程同步的?

Mutexlock (互斥锁)、NSCondition lock (条件锁)消息传送

4、什么是UDP和TCP的区别是什么?

TCP 的全称是传输控制协议,这种协议可以提供面向连接的、可靠的、点到点的通信。

UDP 的全称是用户数据包协议。他可以提供非连接的不可靠的点懂啊多点的通信,是osi参考模型中一种无连接的传输层协议,提供面向事务的简单的不可靠信息传输,_IETF RFC 768 是UDP 的正式规范;

选择何种协议,看程序注重那个方面,可靠抑或快速。

5、TCP/IP 建立连接的过程


TCP/IP 协议中,TCP协议提供可靠的连接服务,采用三次握手建立连接;

第一次握手:建立连接时,客户端发送连接请求到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到客户端连接请求,向客户端发送允许连接应答,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的允许连接应答,向服务器发送确认,客户端和服务器进入通信状态,完成三次握手。

(所谓的三次握手,就是要有三次连接信息的发送、接收过程。TCP连的建立需要进行三次连接信息的发送、接收。)

6、全局变量可不可以定义在被多个.c文件包含的头文件中?为什么?

可以,在不同的c文件中以static 形式来声明同名全局变量。前提是其中只能有一个c文件中对此变量赋初值,此时连接不会出错。

7、如何引用一个已经定义过的全局变量?

extern

可以用引用头文件的方式,也可以用extern 关键字,如果用引用头文件的方式来引用某个在头文件中的全局变量,假定你那个变量写错了,那么编译期间会报错,如果用extern 方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

8、什么叫数据结构?

数据结构是计算机存储、组织数据的方式。是指相互之间存在一种或多种特定关系的数据元素的集合。

通常,精心选择的数据结构可以带来更高的运行或者存储效率。

9、编程中,保存数据有哪几种方式?

数组、自定义类、文件操作,数据库:如(SQLite 、core data、 plist 、NSUserDefaults、file )—持久保存数据

10、Sizeof 和strlen 的区别和联系?

Sizeof() 是运算符,可以用类型做参数,还可以用函数做参数,功能是获得保证能容纳实现所建立的最大对象的字节大小;

strlen()是函数,要在运行时才能计算。参数必须是字符行指针且必须是以”\0″结尾的。功能为:返回字符串的的长度。

11、什么是抽象类?抽象类有什么作用?能实例化吗?

在c++中,含有纯虚拟函数的类称为抽象类,他不能生成对象;

在java中,含有抽象方法的类称为抽象类,同样不能生成对象;

抽象类是不完整的,没有完全实现,只能用作基类;不能实例化。

12、你对@interface和@property的理解?

@interface 申明一个类

@property就是申明2个人函数,getter和setter,编译器会自动产生2个函数;

13、调用一个类的静态方法需不需要release?

静态方法,就是类方法,不需要,类方法对象放在autorelease中

15、do while和while do 的区别?

 

do while 是先执行后判断,条件不满足也要执行一次;

while do 是先判断后执行,条件不满足就一次都不执行。

16、写出几个死循环?

while(1){}、 for(;;){}。

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

#define SECONS_PER_YER(60**60*24*365)UL

18、assign和retain ,copy区别?

assign就是和普通语言的赋值一样,不改变引用计数

retain 在一个对象中保存该对象需要拥有的对象,对该对象引用计数+1,指针拷贝;

copy 对NSString,内容拷贝,拷贝之前都会释放旧的对象

retain 对其他NSObject 和其子类

readonly 表示这个属性是只读的,就是只生成getter 方法,不生成setter 方法。

read write 设置可供访问级别

19、类之间的继承关系,比如UIview 的父类是哪一个等等?

UIResponder ,处理触摸,touchBegin、touchEnd ,nextResponder

const和volatile 分别代表什么意思?

const 简单说是只读,用来保护那些不希望被改变的参数,防止其被那些恶意的代码修改。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是用Objective-C纯代码实现的签到日期界面。实现的界面包括一个导航栏、一个显示当前日期的标签和一个签到按钮。 ViewController.h文件: ```objective-c #import <UIKit/UIKit.h> @interface ViewController : UIViewController @end ``` ViewController.m文件: ```objective-c #import "ViewController.h" @interface ViewController () @property (nonatomic, strong) UILabel *dateLabel; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // 设置导航栏标题 self.navigationItem.title = @"签到"; // 设置背景颜色 self.view.backgroundColor = [UIColor whiteColor]; // 创建并添加日期标签 self.dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 200, 50)]; self.dateLabel.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2 - 50); self.dateLabel.textAlignment = NSTextAlignmentCenter; self.dateLabel.textColor = [UIColor blackColor]; [self.view addSubview:self.dateLabel]; // 更新日期标签的文本 [self updateDateLabel]; // 创建并添加签到按钮 UIButton *checkInButton = [UIButton buttonWithType:UIButtonTypeSystem]; checkInButton.frame = CGRectMake(0, 0, 200, 50); checkInButton.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2 + 50); [checkInButton setTitle:@"签到" forState:UIControlStateNormal]; [checkInButton addTarget:self action:@selector(checkInButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:checkInButton]; } // 更新日期标签的文本 - (void)updateDateLabel { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy年MM月dd日"; self.dateLabel.text = [formatter stringFromDate:[NSDate date]]; } // 签到按钮点击事件 - (void)checkInButtonClicked:(UIButton *)sender { // TODO: 处理签到逻辑 // 更新日期标签的文本 [self updateDateLabel]; } @end ``` 在AppDelegate.m文件中,将ViewController设置为根视图控制器: ```objective-c #import "AppDelegate.h" #import "ViewController.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; ViewController *viewController = [[ViewController alloc] init]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController]; self.window.rootViewController = navigationController; [self.window makeKeyAndVisible]; return YES; } ``` 这样就完成了一个简单的签到日期界面的实现。运行程序后,可以看到一个带有日期标签和签到按钮的界面。点击签到按钮后,日期标签上的日期会更新为当前日期。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值