iOS开发工程师面试题(二)

1.手写冒泡跟插入排序

冒泡排序来源于生活常识,相当于把数组竖起来,轻的向上,重的向下。void bubbleSort(int[] unsorted)
{
    for (int i = 0; i < unsorted.Length; i++)
    {
        for (int j = i; j < unsorted.Length; j++)
         {
            if (unsorted[i] > unsorted[j]) {
                int temp = unsorted[i];
                unsorted[i] = unsorted[j];
                unsorted[j] = temp;
            }
        }
    }
}
插入排序,有点类似打斗地主时候摸牌配顺子,345678910JQKA,先抽到3,5又抽到4就把4插在3,5之间。void insertSort(int *a,int n)
{
    int i,j,key;

    // 控制需要插入的元素
    for (i = 1; i < n; i++)
    {
         // key为要插入的元素
        key = a[i];
        // 查找要插入的位置,循环结束,则找到插入位置
        for (j = i; j > 0 && a[j-1] > key; j--)
        {
             // 移动元素的位置,供要插入元素使用
            a[j] = a[j-1];
        }

        // 插入需要插入的元素
        a[j] = key;
    }
}

2.重写setter/getter方法

 假设声明属性
 @property (nonatomic, copy) NSString *imageName;
 这里一旦连setter,getter方法都重写,编译器不会给我们自动生成成员变量_imageName,因此我们需要在类的声明中添加一个成员变量_ImageName:
 @interface Demo () {
    NSString *_imageName;
 }
 @end一,ARC中
 - (void)setImageName:(NSString *)aName {
    if (_imageName != aName) {
       _imageName = nil;
       _imageName = [aName copy];
    }
 }
 - (NSString *)imageName {
   return _imageName;
 }
二,MRC中
- (void)setImageName:(NSString *)aName {
    if (_imageName != aName) {       [_imageName release];
       _imageName = nil;
       _imageName = [aName copy];
    }
 }
 - (NSString *)imageName {
   return _imageName;

3.手写简单的单例

+ (instancetype)shared {
  static XNGUserManager *sg_userManager = nil;
  static dispatch_once_t onceToken;
  dispatch_once(&onceToken, ^{
    if (sg_userManager == nil) {
      sg_userManager = [[XNGUserManager alloc] init];
    }
  });

  return sg_userManager;
}

4.谈谈iOS中的通知

一,获取通知对象:NSNotificationCenter *center = [NSNotificationCenter  defaultCenter];二,通知对象的三个属性
@property (readonly, copy) NSString *name;//通知的名称
@property (nullable, readonly, retain) id object;//通知的发布者
@property (nullable, readonly, copy) NSDictionary *userInfo;//额外的信息,可以储存一些数据
三,通知对象的初始方法 - (instancetype)initWithName:(NSString *)name
                      object:(nullable id)object
                       userInfo:(nullable NSDictionary *)userInfo;
+ (instancetype)notificationWithName:(NSString *)aName
                              object:(nullable id)anObject;
+ (instancetype)notificationWithName:(NSString *)aName
                              object:(nullable id)anObject
                            userInfo:(nullable NSDictionary *)aUserInfo;四,发布通知的三种方法
- (void)postNotification:(NSNotification *)notification;
- (void)postNotificationName:(NSString *)aName
                      object:(nullable id)anObject;
- (void)postNotificationName:(NSString *)aName
                      object:(nullable id)anObject
                       userInfo:(nullable NSDictionary *)aUserInfo;
五,注册通知- (void)addObserver:(id)observer
           selector:(SEL)aSelector
           name:(nullable NSString *)aName
            object:(nullable id)anObject;

- (id <NSObject>)addObserverForName:(nullable NSString *)name
                             object:(nullable id)obj
                              queue:(nullable NSOperationQueue *)queue
                              usingBlock:(void (^)(NSNotification *note))block六,取消注册通知
- (void)removeObserver:(id)observer;

- (void)removeObserver:(id)observer
                  name:(nullable NSString *)aName
                object:(nullable id)anObject;
- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}
 

5.UIView与CLayer有何区别

1).UIView 是 iOS 系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由 CoreAnimation 来实现的。它真正的绘图部分,是由一个 CALayer 类来管理。 UIView 本身更像是一个 CALayer 的管理器,访问它的跟绘图和跟坐标有关的属性。

2).UIView 有个重要属性 layer ,可以返回它的主 CALayer 实例。

3).UIView 的 CALayer 类似 UIView 的子 View 树形结构,也可以向它的 layer 上添加子layer ,来完成某些特殊的表示。   即 CALayer 层是可以嵌套的。

4).UIView 的 layer 树形在系统内部,被维护着三份 copy 。分别是逻辑树,这里是代码可以操纵的;   动画树,是一个中间层,系统就在这一层上更改属性,进行各种渲染操作;显示树,其内容就是当前正被显示在屏幕上得内容。

5).动画的运作:对 UIView 的 subLayer (非主 Layer )属性进行更改,系统将自动进行动画生成,动画持续时间的缺省值似乎是 0.5 秒。

6).坐标系统: CALayer 的坐标系统比 UIView 多了一个 anchorPoint 属性,使用CGPoint 结构表示,值域是 0~1 ,是个比例值。   这个点是各种图形变换的坐标原点,同时会更改 layer 的 position 的位置,它的缺省值是 {0.5,0.5} ,即在 layer 的中央。

7).渲染:当更新层,改变不能立即显示在屏幕上。当所有的层都准备好时,可以调用setNeedsDisplay 方法来重绘显示。

8).变换:要在一个层中添加一个 3D 或仿射变换,可以分别设置层的 transform 或affineTransform 属性。

9).变形: Quartz Core 的渲染能力,使二维图像可以被自由操纵,就好像是三维的。   图像可以在一个三维坐标系中以任意角度被旋转,缩放和倾斜。 CATransform3D 的一套方法提供了一些魔术般的变换效果。
时间: 2024-08-26 16:25:42

iOS开发工程师面试题(二)的相关文章

iOS开发工程师笔试题

iOS开发工程师笔试题 分类: IOS 面试题2013-01-17 10:28 820人阅读 评论(0) 收藏 举报 随着iOS平台开发的职位的增加,笔试.面试也越来越有“套路”,这里我总结了一些面试题,多数是Objective-C的基础知识,适合于面试新人,答案是我自己答的,不准确的地方,欢迎指出. 1.   Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? Object-c的类不可以多重继承:可以实现多个接口,通过实

iOS开发工程师面试题(一)

SDWEBImge原理 一,先上标答 1)UIImageView+WebCache:  setImageWithURL:placeholderImage:options: 先显示 placeholderImage ,同时由SDWebImageManager 根据 URL 来在本地查找图片. 2)SDWebImageManager: downloadWithURL:delegate:options:userInfo: SDWebImageManager是将UIImageView+WebCache同

极客学院iOS开发工程师初级+中级+高级视频教程

下载地址:百度网盘下载 课程目录: 初级IOS开发工程师 19课程 7小时50分职业介绍1.iOS 开发的前世今生C语言基础 1.二级 C 流程控制 2.二级 C 函数与指针 3.二级 C 数组4.二级 C 字符串5.二级 C 作用域.预处理与存储 6.二级 C 结构体与共用体 7.二级 C 文件Swift语言基础1.Swift 语言基础2.Swift 中的字符串和集合 3.Swift 中的函数和闭包 4.Swift 面向对象基础(上)5.Swift 面向对象基础(中) 6.Swift 面向对象

ios开发工程师常见面试题汇总

经过本人最近的面试和对面试资料的一些汇总,准备记录这些面试题,以便ios开发工程师找工作复习之用,本人希望有面试经验的同学能和我同时完成这个模块,先出面试题,然后会放出答案. 1.Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 2.#import 跟#include 又什么区别,@class呢: #import<> 跟 #import""又什么区别? 3.属性readwrite,readonly,

腾讯web前端开发工程师笔试题及答案

1. 如何实现事件委托? 首先要知道什么是事件委托. 考虑一个列表,在li的数量非常少的时候,为每一个li添加事件侦听当然不会存在太多性能方面的问题,但是当列表非常的长,长到上百上千甚至上万的时候(当然只是一个解释,实际工作中很少遇到这么多li的情况),为每个li添加事件侦听就会对页面性能产生很大的影响. 就像下面这段代码: <!DOCTYPE HTML><html><head><meta charset="utf-8" /><ti

iOS开发CoreAnimation解读之二——对CALayer的分析

iOS开发CoreAnimation解读之二——对CALayer的分析 一.UIView中的CALayer属性 1.Layer专门负责view的视图渲染 2.自定义view默认layer属性的类 二.几种系统的Layer类 1.CAEmitterLayer 2.CAGradientLayer 3.CAEAGLLayer 4.CAReplicatorLayer 5.CAScrollLayer 6.CAShapeLayer 7.CATextLayer 8.CATiledLayer 9.CATrans

如何成为一名优秀的iOS开发工程师

如果你是一位专业的iOS开发工程师,你应该为自己感到自豪.因为你能在强大的iOS系统下,一展身手实现自己和他人的想法,这是一件令人无比激动的事情. 作为一名iOS开发工程师,你一定想成为行业的佼佼者.那么,如何成为一名优秀的iOS开发工程师呢?我觉得做到以下几点,你就离优秀越来越近了. 提高英语水平 作为码农,英语水平虽然不是一个硬指标,但是,如果你的英语水平足够好,那真是如虎添翼.在公司里面,糟糕的英语表达能力也掩盖了你在软件开发技术上的优势. 很多优秀的技术文章都是英文版本的,就像苹果官方文

iOS 开发工程师

iOS 开发工程师 工作职责: 负责下厨房 iPhone 客户端的产品开发.维护.优化以及扩展. 任职要求: 对技术有热情,热爱新的挑战 熟悉 CocoaTouch, ASIHttpRequest, SDWebImage, GCD, Core Animation, CoreData 等 熟悉 KVO, ARC 了解设计模式及其原理 能独立解决技术问题 有团队协作精神 加分项: 参与过开源项目 有 GUI 程序优化经验 熟悉 Android 或其他平台 GUI 程序构建

写给IOS开发工程师的网页前端入门笔记

前言:作为IOS开发工程师,终会接触到网页前端开发,甚至可能会有 用HTML5开发IOS的app客户端的需求.比如现在上架的app就有比如理财类型的app有的就用HTML开发的,从理财类型的app需求上思考,用 HTML5确实是个不错的选择,利用了跨平台的同时,也考虑到了理财类型的app仅仅需要处理的是数据的业务逻辑,不存在较多的本地存储数据,而且涉及到 的财务信息从安全性考虑数据基本都会存储在服务器端,是不可能用于存储在本地的,再加上HTML5对各种手机屏幕的尺寸适配性非常灵活,所以这一类ap