iOS初级

2015-09-18  本文已影响387人  lubinghu12

1.OC中创建线程的方法是什么?制定在主线程中执行代码?如何延时执行代码?

1)有三种: NSThread; NSOperation,NSOperationQueue;GCD;

2)//一种

[self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>];

//二种

[self performSelector:<#(SEL)#> onThread:[NSThread mainThread] withObject:<#(id)#> waitUntilDone:<#(BOOL)#>];

//三种

dispatch_sync(dispatch_get_main_queue(), ^{

});

3)有三种

//一种 使用perform

[self performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)#>];

//二种 使用NSTimer

[NSTimer scheduledTimerWithTimeInterval:<#(NSTimeInterval)#> target:<#(id)#> selector:<#(SEL)#> userInfo:<#(id)#> repeats:<#(BOOL)#>];

//三种 使用GCD

double delayInSeconds = 2.0;

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds *NSEC_PER_SEC));

dispatch_after(popTime, dispatch_get_main_queue(), ^{

});

2.#import跟#include,@class有什么区别?#import<>跟#import””有什么区别?

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

2)@class仅仅声明一个类名,并不会包含类的完整声明;@class还能解决循环包含的问题;

3)#import<>用来包含系统自带的文件,#import""用来包含自定义的文件;

3.属性readwrite,readonly,assign,retain,copy,nonatomic各是什么作用,在哪种情况下用?

1)readwrite和readonly是用在property中,前者能生成set和get方法,后者只能生成get方法;

2)assign用于基本数据,即非对象数据;

3)copy一般用于字符串,retain一般用于对象(ARC里面用strong;);

4)atomic原子性,加锁,耗内存;nonatomic非原子性,因移动设备内存有限,一般为非原子性,它也一般可以用来修饰UI ,UI是绝对安全,因其只能在主线程,所以不用加锁;

4.写一个setter方法用于完成@property (nonatomic, retain) NSString *name,写一个setter方法用于完成@property (nonatomic, copy) NSString *name;

1)

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

if (_name !=name) {

[_name release];

_name = [name retain];

}

2)

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

if (_name !=name) {

[_name release];

_name = [name copy];

}

5.语句 NSString *obj = [[NSData alloc] init];在编译运行时,obj分别的类型;

编译时是NSString类型;运行时是NSData类型;

6.浅拷贝和深拷贝的区别?

浅拷贝:没有产生新对象,只是地址的拷贝;

深拷贝:全部内容复制一遍,开辟新的内存空间;

7.分类有什么优点,分类和继承有什么区别;

1)分类的优点:分类可以在不修改原来类模型的基础上拓展方法;

2)相似之处:都能扩充新的方法;

区别:

分类:不会产生新的类,分类只能添加方法,不能添加成员变量,一旦实现父类的原方法,会覆盖父类的方法;

继承:新建一个子类,如是覆盖父类的方法,但还是有可能调用父类的方法,父类的操作还是可能会调回来;

8.分类和类扩展的区别:

[ 类扩展(亦匿分类)是:@interface ViewController ()

@end ];

分类:它又名称;只能扩充方法;

类扩展:没有名称;它能扩充成员变量;

9.protocol在object c和java的区别;

java的接口中声明的方法必须都实现;

oc不一定要实现;

10.KVO和KVC?

kvc:通过一个字符串的key来修改对象的属性值;

@property (nonatomic, assign) int age;

//id是指OC任意对象,如果是基础数据类型,要在其前面加上”@”

[self setVaule:@10 forKeyPath:@“age”];

kvo:用来监听某个对象的属性;

11.使用代理的目的;

1)传数据;

2)用来通知一些事情,如tabel的某一行被点了,这个时候要通知代理;

3)解耦;

12.为什么说oc是一门运行时的动态语言;

oc是在运行时才知道对象的数据类型,编译时只有编译器知道;

eg:NSString *obj = [[NSData alloc] init];

13.通知和协议的区别?

相同点:都能传数据;

不同点:

通知:耦合性更低,只要监听我通知,可以给多个传对象;

协议:使用协议只能给一个对象传数据;

14.推送通知;

1)本地推送:

2)远程推送:

15.什么是多态?

不同对象对同一消息的不同响应.子类可以重写父类的方法

多态就是允许方法重名 参数或返回值可以是父类型传入或返回

16.单例?

(最好是单独新建一个.h的文件,写成宏的形式;)

// .h文件

#define LBSingletonH(name) + (instancetype)shared##name;

// .m文件

#define LBSingletonM(name) \

static id _instance = nil; \

+ (id)allocWithZone:(struct _NSZone *)zone \

{ \

static dispatch_once_t onceToken; \

dispatch_once(&onceToken, ^{ \

_instance = [super allocWithZone:zone]; \

}); \

return _instance; \

} \

+ (instancetype)shared##name \

{ \

static dispatch_once_t onceToken; \

dispatch_once(&onceToken, ^{ \

_instance = [[self alloc] init]; \

}); \

return _instance; \

} \

- (id)copyWithZone:(NSZone *)zone \

{ \

return _instance; \

}

17.方法和选择器(selector)如何区别?

1)选择器:它是用来包装一个方法,用来找到内存中对应的方法地址,再调用对应的方法;

2)方法:是存于内存中;

18.垃圾回收?

垃圾回收:程序在运行过程中随机回收一些没有正在使用的对象;

oc1.0:没有垃圾回收;

oc2.0:有垃圾回收,但是只用在mac平台,iOS不支持,因耗内存;

ARC:只不过是编译器特性,编译器会自动生成管理内存的代码;

19.什么是NSOpetation queue?

用来异步执行的操作,一般可用在网络请求等耗时操作;

20.什么是懒加载?

只加载一次,提升体验;如:控制器显示窗口view;

21.一个控制器能不能使用2个tableView?

可以;

22.什么是简便构造方法;

用来创建对象的类方法;

23.什么是 NSManagedObject model?

NSManagedObject 继承自NSObject,是一个比较特殊的模型,用法比较复杂;

24.什么是predicate?

使```基于/过滤

NSArray *array = @[@"13",@"abc",@"dfd"];

[array filteredArrayUsingPredicate:<#(NSPredicate *)#>];

[array filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {

return [evaluatedObject rangeOfString:@"a"].length !=0;

}]];

24.const指常量;

25.线程和进程的区别?

线程是用来干事情的,多线程能做多件事;

进程是用来开辟内存空间;

26.堆和栈的区别?

堆放对象,内存是要程序员手动释放;

栈放局部变量,内存是自动释放;

block堆和栈都有可能,默认是放在栈;

27.TableView的delegate的属性是assign不是retain?

为了解决return循环的问题;

28.tableView的重用机制?

循环利用;

29.ViewController的loadView,viewDidLoad,viewDidUnload分别是什么时候调用;

1)省略;

2)省略;

3)当控制器的view因内存不足被系统自动回收;

30.对象是什么时候释放的?

引用计数器为0时;

31.如何创建一个iPad应用程序

设备支持的应用程序

iPhone上只能运行iPhone程序

iPad上能够运行iPhone \ iPad程序

开发过程

iPhone和iPad开发的流程是一致的

在iPhone开发中学到的所有知识基本都能用在iPad上

32.什么是UIPopoverController

是iPad开发中常见的一种控制器(在iPhone上不允许使用)

跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController

它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面


End…………

上一篇 下一篇

猜你喜欢

热点阅读