zoukankan      html  css  js  c++  java
  • iOS开发基础笔试题-(1)

    前言

    以下部分题目来源于网络,笔者在此处收集起来,既是要巩固自我,也希望能够帮助到同样需要的人!参考答案均为笔者所写,其有疑问或者出错之处,请在评论中提出,谢谢!不喜勿喷!

    1. #import和#include的区别?

    参考答案:

    #importObjective-C导入头文件的语法,可保证不会重复导入。
    #includeC/C++导入头文件的语法,如果是Objective-CC/C++混编码,对于C/C++类型的文件,还是使用#include来引入,这种写法需要添加防重复导入的语法。

    2. @class的作用

    @class一般用于头文件中通过前向声明,就可以声明了,但是在.m文件中还是需要使用#import进来的。它的作用只是前向声明。

    3. 用NSLog函数输出一个浮点类型,结果四舍五入,并保留一位小数

    参考答案:

    使用%f来格式化,其中要保留一位小数,因此再用%.1f就是保留一位。

    4.property属性的修饰符有什么样的作用

    参考答案:

    property是属性访问声明,扩号内支持以下几个属性:

    • getter=getNamesetter=setName:设置settergetter的方法名
    • readwritereadonly:设置可供访问级别
    • assign:方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题
    • retain:其setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序
    • copy:其setter方法进行copy操作,与retain处理流程一样,先对旧值release,再copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。
    • nonatomic:非原子性访问,不加同步, 多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。

    这里有一篇文章介绍:iOS中的property的修饰符如何使用

    5. self.name=@object和name=@object有什么不同?

    参考答案:

    self.name =”object”:会调用对象的setName()方法;name = “object”:会直接把"object"字符串赋值给当前对象的name属性。

    6. viewDidLoad、loadView和viewDidUnload何时调用

    参考答案:

    viewDidLoadview加载完成时调用,loadViewcontrollerviewnil时调用。对于viewDidUnload现在已经不能直接调用了。

    7. objective-c中的可变与不可变词典

    参考答案:

    可变字典就是可以增、删、改操作的字典,对应于NSMutableDictionary类型。
    不可变字典就是不能执行增、删、改操作的字典,对应于NSDictionary类型。

    8.Objective-C的内存管理

    参考答案: 现在内存管理几乎都采用ARC,也就是Automatic Reference Counting,意思是自动引用计数。由编译器在编译时自动为添加retainrelease等代码。

    如果问的MRC,也就是Manual Reference Counting,意思是手动内存管理。

    黄金法则:谁使对象的引用计数+1,不再使用该对象时,谁就应该使该对象的引用计数-1。

    9. 自动生成getter/setter方法

    参考答案: 对于以前的代码,那时还没有property,使用这样的方法来创建:

    在后面有了property,直接使用@property (nonatomic, copy) NSString *name这样的方法来声明,编译器会自动生成getter/setter方法并生成一个_name成员变量。

    10. 什么是MVC

    参考答案:

    我相信大部分人在被问到这个问题时,都会回答M就是ModelV就是ViewC就是Controller。这都是停留在概念上的回答,明显没有什么工作经验。对于一个对框架和架构有一定的思想的人,回答时会从项目的耦合度、团队开发如何减少冲突、如何降低团队与团队之间的沟通成本、如何将MVC之间按照既定的标准建立沟通的桥梁。

    Model用于处理数据,通常来说,Model中会包含多个字段,用于存储数据。但是,Model还会有一部分逻辑,比如说:

    对于View,不应该包含逻辑,应该根据模型直接获取数据。

    对于Controller,大部分交互逻辑都集中到了这里,所有View需要的数据,都是通过Controller提取Model然后交给view去显示数据。

    11. 重写getter/setter方法

    假设声明属性:

    重写这个属性的getter/setter方法:

    参考答案:

    这里一旦连getter方法也重写,编译器不会给我们自动生成成员变量_blogName,因此我们需要在类的声明中添加一个成员变量_blogName

    在自动内存管理下(ARC):

    对于手动内存管理(MRC):

  • 相关阅读:
    由浅入深之Tensorflow(3)----数据读取之TFRecords
    由浅入深之Tensorflow(2)----logic_regression实现
    由浅入深之Tensorflow(1)----linear_regression实现
    Ubuntu14.04+caffe+cuda7.5 环境搭建以及MNIST数据集的训练与测试
    deeplenrnig学习笔记——什么是特征
    Paper List ABOUT Deep Learning
    C++ vector 用法
    转载:逻辑回归的python实现
    kubernetes 二进制安装1
    kubernetes 二进制安装
  • 原文地址:https://www.cnblogs.com/Horkly/p/5456884.html
Copyright © 2011-2022 走看看