IOS面试题--1

1、        简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwritereadonlyassignretaincopynonatomicatomicstrongweak属性的作用?

 

Release -----,alloc 开辟空间 deaclloc销毁空间 .手动调用dealloc的时候会强制将引用计数置为0

 

readwrite,可读可写,让系统生成settergetter   readonly,只可读,只生成getter

 

assign引用计数不会+1,适用于基本数据类型.常用于指向储存于静态区的变量以及delegate,直接赋值

 

retain引用计数+1,获得对象的所有权

 

copy 复制一个对象,并且储存在不同的内存区.原对象的引用计数不变.遵循NSCoping协议的可以深拷贝

 

Nonatomic非原子性的,不保证多线程下保护安全 atomic原子性,保证多线程下安全.有一个属性需要多个线程同时访问一个变量,使用atomic能够自动加锁解锁.

 

Strong,用于ARC模式下,表明对象属于强引用.类似于retain,但是比retain更加安全,只要对象存在拥有者,就可以引用,不会被释放.只要对象失去了拥有者,立即被抛弃.不必再将已经指向已经释放的对象的指针指向空.避免了野指针.

 

Weak类似assign,弱引用.应用计数不会增加.释放指针自动置为nil;

 

 

 

2、        类变量的@protected,@private,@public,@package,声明各有什么含义?

通过->的方式访问成员变量

@protected受保护的.该类和所有子类中的方法可以直接访问这样的变量。

@private 变量是私有的,该类的方法可以直接访问变量。

@public 所有类都可以访问

@package 表示框架内访问,外部无法访问

 

 

3、        线程是什么?进程是什么?二者有什么区别和联系?

线程,是进程的一个具体实例.程序运行的最小单位,是被系统独立调度和CPU的基本运行单元.

进程是操作系统中可以并行工作的基本单元,

一个应用程序有一个进程,一个进程中至少有一个线程.

 

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程

 

 

4、        谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?

在一个进程中有多个线程共同存在,每个线程执行各自的任务,相互之间不会干扰,一个线程可以创建或者撤销其他的线程.让一个进程可以同时执行很多任务.这就减少了等待时间,提高了进程的运行效率.但是多线程会耗费资源,并且由于一个线程死掉会造成整个进程死掉.多线程也容易造成安全性问题.

 

Thread

 

使用GCD

 

使用NSOperationQueue

 

POSX

 

异步方法

 

5、        线程同步和异步的区别?IOS中如何实现多线程的同步?

线程同步是多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低 ,串行执行任务  线程异步:访问资源时在空闲等待时同时访问其他资源,实现多线程机制,并行执行任务

 

使用GCD的主队列.使用NSOperationQueue,把最大线程数设为1

GCD使用障碍

6、        假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符,即上述字符串处理之后的输出结果为:aabcd

 

 

 

 

7、        获取一台设备唯一标识的方法有哪些?

UDID

OPENUDID

广告标识符

Vindor标识符

推送token+bundle_id

UUID

 

8、        ios类是否可以多继承?如果没有,那可以用其他方法实现吗?简述实现过程。

没有.通过协议可以调用.

 

 

 

9、        堆和栈的区别?

:由编译器自动分配释放,存放函数的参数值,局部变量的值等

:一般由程序员分配释放,若程序员不释放,程序结束时可能由系统回收

 

10、     ios本地数据存储都有哪几种方式?

plist(属性列表)

数据库(SQLite)

归档和反归档

文件读写

coreData 

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值