------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------
2.说一下面向对象,面向对象有哪些特性,分别说一下
5.self与super的用法
self是一个指针,指向了方法的调用者,如果是对象调用,则指向对象,如果是类调用,则指向类
6.成员变量的作用域
@private:代表成员变量只能被当前类直接访问。
7.重写description方法的作用
更改NSLog显示在屏幕上的格式。
8.说一下万能指针,点语法
万能指针:就是id,它可以指向任何对象,相当于NSObject *
9.@property与@synthesize的用法
@property:
11.内存管理的管理范围、原理、原则、体现在哪些地方
管理范围:所有继承NSObject的对象。
12.@property的参数有哪些,他们的作用分别是什么?
set内存管理方面:
14.什么是分类(category)?分类与继承的区别?
分类:分类是在不更改原有类成员变量和方法的情况下,给原有类增加方法。
15.说一下什么是协议(protocol)?以及其中协议中的两个关键字?
协议是用来声明多种方法,以方便其它类能够随时调用,提高了程序编写效率。
16.说一下你对代理的理解
定义:为其它对象提供一种代理以用来控制这个对象。
17.block的作用,与函数有什么异同
作用:block用于保存一段代码,方便程序随时调用
18.@class与#import有什么区别
1>@class只是在.h文件中声明有某个类,并不知道此类的成员变量和方法。
19.常用的结构体有哪些?
NSRange:表示范围。
20常用的类以及集合
常用类:NSString/NSMutableString
21.copy与retain的区别?
22.集合中排序有哪些方式?
有四种排序方法:
1.import的作用
impor是导入外部文件或框架,跟include功能相同,但是import的优点是可以防止重复导入。
impor是导入外部文件或框架,跟include功能相同,但是import的优点是可以防止重复导入。
2.说一下面向对象,面向对象有哪些特性,分别说一下
面向对象:面向对象简称OOP,在解决问题时我们只关心解决此方法的工具,也就是对象,不关心解决此方法的过程。
特性:有三个特性:
封装:封装是为了防止外界直接访问或修改对象的成员变量,提高了程序安全性。
继承:子类继承父类,子类完全拥有父类的成员变量或方法。减少了代码量,提高了类之间的联系。
多态:某一类事物的多种形态,例如我们可以通过父类调用子类方法。减少了代码量,提高了工作效率。
3.OC方法与C函数的区别
1>OC方法归对象所有,C函数是归整个程序所有。
3.OC方法与C函数的区别
1>OC方法归对象所有,C函数是归整个程序所有。
2>OC方法可以访问对象的成员变量,而C函数不能访问成员变量。
3>函数不能写在@interface 和 @end之间。
4.OC对象方法与OC类方法的区别
1>对象方法以—开头,类方法以+开头。
2>对象方法可以访问成员变量,类方法不能访问成员变量。
3>对象方法由对象调用,类方法由类调用。
4>对象方法可以传递参数,类方法不能传递参数。
5.self与super的用法
self是一个指针,指向了方法的调用者,如果是对象调用,则指向对象,如果是类调用,则指向类
super是调用父类方法,一般用于在重写父类方法的时候需要保留某些方法。
6.成员变量的作用域
@private:代表成员变量只能被当前类直接访问。
@protected:代表成员变量能被当前类或子类直接访问,是默认属性。
@public:代表成员变量能在任何地方被直接访问。
@package:代表成员变量只能在同一框架内直接被访问。
7.重写description方法的作用
更改NSLog显示在屏幕上的格式。
-description默认是以类名:内存地址 显示
+description默认是以类名显示。
8.说一下万能指针,点语法
万能指针:就是id,它可以指向任何对象,相当于NSObject *
点语法:是成员变量的setter和getter方法的简写。如果通过点语法赋值,则是setter方法,如果通过点语法返回某个值,则是getter方法。
9.@property与@synthesize的用法
@property:
1>可以自动声明成员变量的setter和getter方法。在XCODE4.5以后还可以自动实现变量的setter和getter方法。
2>可以自动生成下划线_加成员变量名的成员变量(eg:_age),类型是@private。
3>@property 是在头文件中使用。
@synthesize:
1>可以自动实现成员变量的setter和getter方法。
2>可以自动生成成员变量名(eg:age),且类型是@private。
3>@synthesize是在.m文件中使用。
10..h和.m文件的分工
.h:此文件是声明有哪些方法和成员变量 。
.h:此文件是声明有哪些方法和成员变量 。
.m:此文件是实现变量的方法。
11.内存管理的管理范围、原理、原则、体现在哪些地方
管理范围:所有继承NSObject的对象。
原理:通过引用计数器是否为0进行判断,如果某个对象的引用计数器为0,则此对象已经被回收,否则没有被回收
原则:1>如果谁想使用某个对象,则需要对对象进行retain操作。
2>如果谁想释放某个对象,则需要对对像进行release操作。
3>谁retain,谁release,谁alloc,谁release。
体现:1>@perproty参数方面,拥有retain、assign和copy。retain和copy会对对象的引用计数器+1;
2>autorelease方面。会对对象池中的所有对象进行一次release操作。
12.@property的参数有哪些,他们的作用分别是什么?
set内存管理方面:
retain:对旧值进行release,对新值进行retain操作。
assign:说明不需要进行内存管理,直接赋值
copy:release旧值,copy新值。
是否需要setter和getter方法方面:
Readwrite:需要setter和getter方法。
Readonly:只需要getter方法。
方法名方面:
setter = 方法名。设置setter方法名
getter = 方法名。设置getter方法名
多线程方面:
nonatomic:不需要多线程,高性能。
atomic:使用多线程,性能较低。
13.autorelease的作用、好处、注意
作用:1>将所有对象加入自动释放池中。
作用:1>将所有对象加入自动释放池中。
2>当池销毁时会对池中所有对象进行一次release操作。
3>会返回对象本身。
4>不会影响对象引用计数器。
好处:1>不需要关心对象释放时间。
2>不需要关心何时使用release。
注意点:1>如果程序占用内存较大,则不使用autorelease。
2>如果程序占用内存较小,则使用autorelease影响不大。
14.什么是分类(category)?分类与继承的区别?
分类:分类是在不更改原有类成员变量和方法的情况下,给原有类增加方法。
分类与继承的区别:
1>分类只能增加方法,不能增加成员变量;
继承是子类完全拥有父类的成员变量和方法,还可以在父类的基础上增加自己的成员变量和方法。
2>分类方法名如果和原有类的方法名相同,则分类的方法会覆盖原有类中的方法。
继承下子类中的方法名不能和父类中的方法名相同。
15.说一下什么是协议(protocol)?以及其中协议中的两个关键字?
协议是用来声明多种方法,以方便其它类能够随时调用,提高了程序编写效率。
@required:说明此方法必须被实现,如果不被实现就会发出警告。
@optional:说明此方法可以被实现,也可以不被实现。
16.说一下你对代理的理解
定义:为其它对象提供一种代理以用来控制这个对象。
eg: 小明不想做饭,因此请了个保姆,但是请保姆需要签一份协议,保姆需要遵守协议。所以保姆就是代理,代理需要遵守某个协议。
条件:如果要成为代理,则必须遵守某个协议(协议用于声明方法,限制代理必须拥有某个方法)。
作用:可以监听某个方法是否被触发。
优点:耦合性较低,增加了代码的弹性。
eg:代理被删除了,但是Person还在。代理和对象之间互不影响。
作用:block用于保存一段代码,方便程序随时调用
与函数相同点:1>都有返回值
2>都有形参
3>调用方法相同
4>都可以保存代码
与函数不同点:1>blok的标志是^,而函数没有
2>block默认情况下不能修改局部变量值,函数可以。
3>在block情况下,当语句结束时,需要在大括号外部添加分号,而函数不需要。
18.@class与#import有什么区别
1>@class只是在.h文件中声明有某个类,并不知道此类的成员变量和方法。
#import可以被导入文件的所有信息,包括成员变量和方法。
2>使用@class时,如果同时导入上百个文件,一旦被导入文件有所更改,则只需更改头文件,不需重新编译,效率较高。
如果使用#import,则需要重新编译,效率较低。
3>如果在.m文件中需要调用某个类的成员变量和方法,则需要#import导入。
19.常用的结构体有哪些?
NSRange:表示范围。
NSPoint/CGPoint:表示点位置
NSSize/CGSize:表示UI的尺寸大小
NSRect/CGRect:表示UI的位置和尺寸大小
20常用的类以及集合
常用类:NSString/NSMutableString
集合:NSArry/NSMutabArry(有序)、NSSet/NSMutableSet、NSDictonary/NSMutableDictonary、NSDate、NSObject
21.copy与retain的区别?
浅拷贝情况下:copy就是retain。
深拷贝情况下:copy会产生新对象,源对象引用计时器不变,副本计数器加1.
22.集合中排序有哪些方式?
有四种排序方法:
1>简单排序:
NSArray *array = [NSArray arrayWithObjects:@"abc",@"456",@"123",@"789",@"ef", nil];
NSArray *sortedArray = [array sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"排序后:%@",sortedArray);
2>block排序(官方推荐)
NSArray *array = [NSArray arrayWithObjects:@"1bc",@"4b6",@"123",@"789",@"3ef", nil];
NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
//这里的代码可以参照上面compare:默认的排序方法,也可以把自定义的方法写在这里,给对象排序
NSComparisonResult result = [obj1 compare:obj2];
return result;
}];
NSLog(@"排序后:%@",sortedArray);
3>自定义排序
NSArray *array2 = [array sortedArrayUsingSelector:@selector(compareStudent:)];
NSLog(@"array2:%@", array2);
- (NSComparisonResult)compareStudent:(Student *)stu {
// 先按照姓排序
NSComparisonResult result = [self.lastname compare:stu.lastname];
// 如果有相同的姓,就比较名字
if (result == NSOrderedSame) {
result = [self.firstname compare:stu.firstname];
}
return result;
}
4>高级排序
// 1.先按照书名进行排序
NSSortDescriptor *bookNameDesc = [NSSortDescriptor sortDescriptorWithKey:@"book.name" ascending:YES];
// 2.再按照姓进行排序
NSSortDescriptor *lastnameDesc = [NSSortDescriptor sortDescriptorWithKey:@"lastname" ascending:YES];
// 3.再按照名进行排序
NSSortDescriptor *firstnameDesc = [NSSortDescriptor sortDescriptorWithKey:@"firstname" ascending:YES];
// 按顺序添加排序描述器
NSArray *descs = [NSArray arrayWithObjects:bookNameDesc, lastnameDesc, firstnameDesc, nil];
NSArray *array2 = [array sortedArrayUsingDescriptors:descs];
NSLog(@"array2:%@", array2);
23.遍历集合有几种方式?分别说一下
有三种方法遍历:
有三种方法遍历:
方法一:普通遍历:
for (int i=0; i<array.count;i++)
{
NSLog(@"%@",array[i]);
}
方法二:快速遍历
for (id obj in array)
{
NSLog(@"%@",obj);
}
方法三:block遍历
[array enumerateObjectsUsingBlock:
^(id obj,NSUInteger idx, BOOL *stop)
{
NSLog(@"index = %d,元素 = %@",idx,obj);
if ( idx = 0)
{
*stop = YES;// 停止遍历
}
} ];
24.NSValue与NSNumber的区别
1>NSNumber是NSValue的子类。
2>NSNumber只能包装基本数据类型,而NSValue可以包装任意类型,例如字符、数组、结构体等。