iOS面试题01

1.#import和#include、@class有什么区别?#import<>和#import“”又有什么区别?

答:1.#import和#include都能完整地包含某个文件的内容,#import能防止同一个文件被包含多次;

  [email protected]仅仅是声明一个类名,并不会包含类的完整声明;@class还能解决循环包含的问题;

  3.#import<>用来包含系统自带的文件,#import“”用来包含自定义的文件。

2.属性readwrite、readonly、assign、retain、copy、nonatomic、atomic、strong、weak各是什么作用?在哪种情况下使用?

  1.readwrite:同时生成get方法和set方法的声明和实现;这个属性会被当成读写的,是默认属性;

  2.readonly:只生成get方法的声明和实现;是只读的,在@implementation中,只需要一个读取器。如果你试图使用点操作符为属性赋值,将得到一个编译错误。

  3.assign:set方法的实现是直接赋值,用于基本数据类型,不更改索引计数。在使用垃圾收集的应用程序中,如果一个属性使用assign,且这个类符合NSCopying协议,则要明确指出这个标记,而不是简单地使用默认值,否则的话,将得到一个编译警告。(这再次向编译器说明你确实需要赋值,即使它是可拷贝的。??没看懂)

  4.retain:set方法的实现是release旧值,retain新值,用于OC对象。而不能用于Core Foundation对象(因为Core Foundation对象没有引用计数)

eg:

-(void)setName:(NSString *)name{
    if (_name != name) {
        [_name release];
        _name = [name retain];
    }
}

  5.copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型。

-(void)setName:(NSString *)name{
    if (_name != name) {
        [_name release];
        _name = [name copy];
    }
}

*******copy和retain的区别*******

  copy是建立了一个相同的对象,而retain不是。

  比如一个NSString对象,地址为Ox000111,内容为"name"

  copy到另外一个NSString之后,地址为0x000222,内容相同,新的对象的retain为1,旧的对象没有变化;

  retain到另外一个NSString之后,地址相同,为0x000111,内容也相同,旧的对象的retain值+1;

********end**************

 6.nonatomic:非原子性,set方法的实现不加锁,比atomic的性能高,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问。

 7.atomic:原子性,设置成员变量的@property属性时,默认为atomic,提供多线程安全。setter函数会变成下面的:

-(void)setName:(NSString *)name{

    {lock}

    if (_name != name) {

        [_name release];

        _name = [name retain];

    }

    {unlock}

} 

nonatomic禁止多线程,变量保护,提高性能。

atomic是Objc使用的一种线程保护技术,是防止在写未完成的时候被另外一个线程读取,造成数据错误,是非常耗费资源的。如果没有使用多线程的通讯编程,则nonatomic是不错的选择。如果不指定nonatomic,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了nonatomic,那么访问器只是简单地返回这个值。

  8.strong:和retain一样,在使用时,引用计数也会加一。当所有指向它的strong类型都释放时,它会被释放,所以指向它的weak类型,都会被清空。

  9.weak,弱引用,当循环引用时,使用weak。

未完待续--

时间: 2024-10-05 17:20:42

iOS面试题01的相关文章

iOS笔试题01

1. #import 跟#include.@class有什么区别?#import<> 跟 #import”"又什么区别? 1> #import和#include都能完整地包含某个文件的内容,#import能防止同一个文件被包含多次 2> @class仅仅是声明一个类名,并不会包含类的完整声明;@class还能解决循环包含的问题 3> #import <> 用来包含系统自带的文件,#import “”用来包含自定义的文件 2. 属性readwrite,re

iOS面试题,希望给面试的同学一点帮助。

iOS基础面试题 1.用objective-c写一个插入法排序 2.写一个NSString类的实现 + (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding; + (id)initWithCString:(const char *)nullTerminatedCString encoding:(NSStringEncoding)encoding{ NSString *

最全的iOS面试题及答案-转载

1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么? 答: Object-c的类不可以多重继承:可以实现多个接口,通过实现多个接口可以完成C++的多重继承:Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系. 2. #import 跟#include 又什么区别,@class呢, #import<> 跟 #import””又什么区别?

iOS面试题之加载单张图片到底会不会崩溃?

今天,一哥们去某公司面试iOS职位.其中一道题目问,加载一张图片,到底会不会崩溃呢? 我拿到这个问题,当时以为是获取网络图片,那还是可能崩溃的,但实际问题,还有半句,图片是本地的... 这问题,加载本地的怎么会崩溃呢?写这么久加载图片也没遇到如此问题. =================================================== 原来,iPhone毕竟是手持设备,它所占有的内存是有限的,当图片过大的时候会引起内存导致的崩溃现象. 后来,我又查了下,发现,原来还有这么大学

iOS面试题 第一天

今天上午,下午分别面试了两家公司.上午是一家互联网公司,气氛还比较好,是我比较喜欢的.技术这块是直接机试,主要是给了些BUG让我修复,整个过程还算顺利.下午去了一家大型的证券公司.整理技术问题如下: 1. UIView的生命周期是什么样的,执行顺序是怎么样的?init -- loadView -- viewDidLoad -- viewWillAppear -- viewWillDisappear -- viewDidUnload -- dealloc. 2. UIViewController在

iOS 面试题 总结

#include <iostream> using namespace std; int main () { char p[]={'a','b','c'}, q[]="abc"; printf("%d %d\n",sizeof(p),sizeof(q)); //getch(); } //结果 3,4 sizeof有什么作用呢? sizeof是C语言的关键字不并不是函数,这个很容易被忽略 sizeof(a)表示a在内存中所占的字节数 以下是windows

iOS 面试题:OC基本概念题

1.什么是类和对象? 类是一组具有同样特征和功能的事物的抽象 对象描写叙述了一个物体的特征和行为实现 类是对象的抽象 对象是类的实例 2.OC中定义类,创建对象,使用对象. OC中定义类分为接口部分,实现部分 接口部分:对外声明类的特征和行为 实现部分:实现方法,即类的行为实现 创建对象须要进行分配内存空间和初始 3.声明方法,依据需求.区分:方法声明,方法实现,方法运行 4.继承.继承的全部特点 子类能够继承父类全部的声明的方法和除私有的以外实例变量 父类不能使用子类所创建的方法和实例变量 5

一些iOS面试题及简要回答

1. #import 跟#include.@class有什么区别?#import<> 跟 #import""又什么区别? 1> #import和#include都能完整地包含某个文件的内容,#import能防止同一个文件被包含多次 2> @class仅仅是声明一个类名,并不会包含类的完整声明;@class还能解决循环包含的问题 3> #import <> 用来包含系统自带的文件,#import ""用来包含自定义的文件 2.

原 iOS面试题收集

原 iOS面试题收集 发表于2年前(2013-07-22 13:47)   阅读(369) | 评论(0) 4人收藏此文章, 我要收藏 赞0 听云性能监测产品App.Server.CDN免费试用,绑定账号送京东卡 iOS 面试题 Objective-C 1.ARC 是什么? ARC 是 iOS 5 推出的新功能,全称叫 ARC(Automatic Reference Counting).简单 地说,就是代码中自动加入了 retain/release,原先需要手动添加的用来处理内存管 理的引用计数