IOS面试题object-c 1-10

1、简述Object-C的理解与特性?

OC 作为一门 面向对象 的语言,自然具有面向对象的语言特性:封装、继承、多态

它既具有 静态语言的特性(如C++),又有 动态语言的效率(动态绑定、动态加载等)。

总体来讲,OC确实是一门不错的编程语言,Objective-C 具有相当多的动态特性,表现为三方面:

动态类型(Dynamic typing)、动态绑定(Dynamic binding)和 动态加载(Dynamic loading)。

动态——必须到运行时(run time)才会做的一些事情。

动态类型:即运行时再决定对象的类型,这种动态特性在日常的应用中非常常见,简单来说就是id类型。

事实上,由于静态类型的固定性和可预知性,从而使用的更加广泛。

静态类型是强类型,而动态类型属于弱类型,运行时决定接受者。

动态绑定:基于动态类型,在某个实例对象被确定后,其类型便被确定了,该对象对应的属性和响应消息也被完全确定。

动态加载:根据需求加载所需要的资源,最基本就是不同机型的适配,例如,在Retina设备上加载@2x的图片,而在老一些的普通苹设备上加载原图,让程序在运行时添加代码模块以及其他资源,用户可根据需要加载一些可执行代码和资源,而不是在启动时就加载所有组件,可执行代码可以含有和程序运行时整合的新类

2、Objective-C 中是否支持垃圾回收机制?

Objective-C 是支持垃圾回收机制的 (Garbage collection简称GC) , 但是apple的移动终端中 , 是不支持GC的,Mac桌面系统开发中是支持的.

移动终端开发是支持ARC(Automatic Reference Counting的简称), ARC是在 IOS5 之后推出的新技术 , 它与GC的机制是不同的。

我们在编写代码时, 不需要向对象发送release或者autorelease方法, 也不可以调用delloc方法, 编译器会在合适的位置自动给用户生成release消息(autorelease), ARC 的特点是自动引用技术简化了内存管理的难度.

3、OC协议的基本概念和协议中方法默认为什么类型?

Objective-C中的协议是一个方法列表, 且多少有点相关。

它的特点是可以被任何类使用(实现), 但它并不是类(这里我们需要注意), 自身不会实现这样方法, 而是又其他人来实现协议经常用来实现委托对象(委托设计模式)。

如果一个类采用了一个协议, 那么它必须实现协议中必须需要实现的方法, 在协议中的方法默认是必须实现(@required), 添加关键字@optional, 表明一旦采用该协议, 这些“可选”的方法是可以选择不实现的。

4、简述Objective-C中可修改和不可以修改类型?
Objective-C中可修改不可修改的集合类,就是可动态添加修改不可动态添加修改
比如NSArrayNSMutableArray前者在初始化后的内存控件就是固定不可变的,后者可以添加等,可以动态申请新的内存空间
5、当我们调用一个静态方法时,需要对对象进行 release 吗?

不需要, 静态方法 (类方法) 创建一个对象时, 对象已被放入自动释放池。

在自动释放池被释放时,很有可能被销毁

6、当我们释放我们的对象时,为什么需要调用[super dealloc]方法,它的位置又是如何的呢?

因为子类的某些实例是继承自父类的, 因此需要调用[super dealloc]方法, 来释放父类拥有的实例,其实也就是子类本身的。

一般来说我们优先释放子类拥 有的实例,最后释放父类所拥有的实例

 7、简述static、self、super关键字的作用?
函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值.
模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问.
在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明.
在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝.
self: 当前消息的接收者。 
super: 向父类发送消息
8、 isMemberOfClass 和 isKindOfClass 联系与区别?
+isKindOfClass 类方法是从当前类的isa指向(也就是当前类的元类)开始。沿着superclass继承链查找判断和对比类是否相等。
-isKindOfClass 对象方法从 [self class](当前类)开始,沿着superclass继承链查找判断和对比类是否相等。
+is MemberOfClass 类方法直接判断当前类的isa指向(也就是当前类的元类)和对比类是否相等。
-isMwemberOfClass 对象方法是直接判断[self class](当前类)和对比类是否相等。
isKindOfClass和isMemberOfClass的区别
isKindOfClass来确定一个对象是否是一个类的实例,或者是该类祖先类的实例。
isMemberOfClass只能用来判断前者,不能用来判断后者
isKindOfClass 能检测任何的类都是基于NSObject类这一事实,而isMemberOfClass却不可以。
 9、IOS Object-C对象可以被copy的条件?
只有实现了NSCopyingNSMutableCopying协议的类的对象才能被拷贝, 分为不可变拷贝和可变拷贝,具体区别戳这;

NSCopying协议方法为:
- (id) copyWithZone:(NSZone *)zone {
        MyObject *copy = [[[self class] allocWithZone: zone] init];
        copy.username = [self.username copyWithZone:zone];
        return copy;
}

10、在某个方法中 self.name = _name,name = _name 它 们有区别吗,为什么?
前者 (self.name = _name)是存在内存管理的setter方法赋值, 它会对_name对象进行保留或者拷贝操作
后者(name = _name)是普通赋值 。

一般来说,在对象的方法里成员变量和方法都是可以访问的,我们通常会重写Setter方法来执行某些额外的工作。

比如说,外部传一个模型过来,那么我会直接重写Setter方法,当模型传过来时,也就是意味着数据发生了变化,那么视图也需要更新显示,则在赋值新模型的同时也去刷新UI。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/732811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA使用的工具类-Hutool

文章目录 Hutool工具类简介1:身份证工具类相关方法1.1 身份证脱敏处理 字符串补零处理(此处是JAVA类的方法,并无引用StrUtil)springboot前后端分离,后端返回json字符串带斜杠问题处理 在这里整理一下博主常用的工具类方法-hutool工具类,这里囊…

制定一份完美的测试计划,让您的产品质量更上一层楼!

大家好,我是彭于晏。今天学习测试计划如何书写。 虽然很多人日常工作中都知道测试计划是什么,但是写好测试计划,其实并不容易。今天就来一起学习下测试计划如何书写。 什么是测试计划? 测试计划是一份为软件产品所准备的详细文档…

目标检测——监控下打架检测数据集

一、简述 首先,监控下打架检测是维护公共安全的重要手段。在公共场所、学校、监狱等地方,打架事件往往难以避免。通过安装打架检测监控系统,可以实时监控并准确识别打架事件,及时采取必要的应对措施,有效地减少打架事…

RNN预测正弦时间点

import torch.nn as nn import torch import numpy as np import matplotlib matplotlib.use(TkAgg) from matplotlib import pyplot as plt # net nn.RNN(100,10) #100个单词,每个单词10个维度 # print(net._parameters.keys()) #序列时间点预测num_time_steps 50…

消息中间件面试题-参考回答

面试官:RabbitMQ-如何保证消息不丢失 候选人: 嗯!我们当时MYSQL和Redis的数据双写一致性就是采用RabbitMQ实现同步 的,这里面就要求了消息的高可用性,我们要保证消息的不丢失。主要从三 个层面考虑 第一个是开启生产者…

学习SVN

学习SVN 摘要1.简介2.下载安装3.SVN生命周期4.SVN Server搭建5.SVN Client使用6.git与SVN的区别 SVN 官网 Github SVN 源码 摘要 本篇博客对SVN的基础使用进行总结,以便加深理解和记忆 1.简介 SVN是Apache Subversion的缩写,是一个开源的源码版本控制…

java-ssm-jsp-基于ssm的宝文理学生社团管理系统

java-ssm-jsp-基于ssm的宝文理学生社团管理系统 获取源码——》公主号:计算机专业毕设大全

应对高并发的软件架构之道

在去年年终总结的时候,我提出了这样的困惑,究竟什么是真正的技术能力,是对于各种底层技术的钻研吗?钻研是好事,但实践下来,深入钻研并不在实际工作中有用,且钻研的越深,忘得越快&…

AIGC安全研究简述(附资料下载)

2023 AIGC技术实践及展望资料合集(29份).zip 2023 AIGC大型语言模型(LLM)实例代码合集.zip 2023大模型与AIGC峰会(公开)PPT汇总(25份).zip AIGC的安全研究是一个复杂且重要的领域,涉及多个关键…

Leetcode : 1137. 高度检查器

学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。 排序后的高度情况用整数数组 expected 表示,其中 expected[i] 是预计排在这一行中第 i 位的学生的高度(下标从 0 开始)。 给你一个整数…

一篇搞懂什么是LRU缓存|一篇搞懂LRU缓存的实现|LRUCache详解和实现

LRUCache 文章目录 LRUCache前言项目代码仓库什么时候会用到缓存(Cache)缓存满了,怎么办?什么是LRUCacheLRUCache的实现LRUCache对应的OJ题实现LRUCache对应的STL风格实现 前言 这里分享我的一些博客专栏,都是干货满满的。 手撕数据结构专栏…

什么是测试用例?如何设计?

在学习或者实际的测试工作中经常都会提到“测试用例”这个词,没错,测试用例是测试工作的核心,不管要做的是什么样的测试,在真正动手执行测试之前,我们都需要先根据软件需求来设计测试用例,之后再依据设计好…

动态加权平衡损失:深度神经网络的类不平衡学习和置信度校准

系列文章目录 文章目录 系列文章目录前言一、研究目的二、研究方法创新点处理类不平衡的大多数方法交叉熵损失函数Brier Score 三、DWB Loss总结 前言 Dynamically Weighted Balanced Loss: ClassImbalanced Learning and Confidence Calibration of Deep Neural Networks 下载…

2024年3月10日 十二生肖 今日运势

小运播报:2024年3月10日,星期日,农历二月初一 (甲辰年丁卯月癸酉日),法定节假日。 红榜生肖:龙、牛、蛇 需要注意:鸡、狗、兔 喜神方位:东南方 财神方位:…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Image)

Image为图片组件,常用于在应用中显示图片。Image支持加载PixelMap、ResourceStr和DrawableDescriptor类型的数据源,支持png、jpg、jpeg、bmp、svg、webp和gif类型的图片格式。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容&am…

作业 字符数组-统计和加密

字串中数字个数 描述 输入一行字符&#xff0c;统计出其中数字字符的个数。 输入 一行字符串&#xff0c;总长度不超过255。 输出 输出为1行&#xff0c;输出字符串里面数字字符的个数。 样例 #include <iostream> #include<string.h> using namespace std; int m…

AI绘画提示词案例(宠物

目录 1. 雪地猫猫&#xff1a;1.1 提示词&#xff1a;1.2 效果&#xff1a; 2. 趴地猫猫&#xff1a;2.1 提示词&#xff1a;2.2 效果&#xff1a; 3. 长城萨摩耶&#xff1a;3.1 提示词&#xff1a;3.2 效果&#xff1a; 4. 沙发猫猫&#xff1a;4.1 提示词&#xff1a;4.2 效…

[BT]小迪安全2023学习笔记(第21天:Web攻防-JWT)

第21天 JSON Web Token&#xff08;JWT&#xff09; JWT是一种紧凑且自包含的方式&#xff0c;用于在网络上安全地传输信息作为JSON对象。这些信息可以被验证和信任&#xff0c;因为它们是数字签名的。JWT通常用于身份验证和信息交换&#xff0c;下面是一个简化的JWT示例&…

Mysql:如何自定义导出表结构

为了方便将mysql表结构信息快速录入到word或Excel表格中&#xff0c;最终实现如下效果&#xff1a; 对于word,则可将Excel表格复制粘贴即可。 废话不多少&#xff0c;开干。 准备准建&#xff1a;navicat 或sqlyog 第一步&#xff1a;编辑sql&#xff0c;如&#xff1a; SE…

P5461 赦免战俘

来自-赦免战俘 - 洛谷 参考&#xff1a;题解 P5461 【赦免战俘】 - 洛谷专栏 代码&#xff1a; #include <iostream> #include <math.h> //利用pow()函数算次方 using namespace std; int a[1500][1500]; //因为最大每边顶多有2^101024人&#xff0c;所以1500…