【移动应用开发技术】长沙戴维营教育iOS开发面试题周刊_第1页
【移动应用开发技术】长沙戴维营教育iOS开发面试题周刊_第2页
【移动应用开发技术】长沙戴维营教育iOS开发面试题周刊_第3页
【移动应用开发技术】长沙戴维营教育iOS开发面试题周刊_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】长沙戴维营教育iOS开发面试题周刊

[TOC]assign简单的指针赋值,不涉及引用计数的操作。copy产生一个新对象,引用计数为1,老对象引用计数不变。retain对象的引用计数加1。weak自动引用计数环境下使用,与assign类似,但是当对象释放后会自动置为nil。strong自动引用计数环境下使用,类似于retain,强引用的对象不会被释放。center和frame是指视图在父视图的坐标系统中的表示,center表示UIView的中心点在父视图坐标系统中的位置,frame表示UIView在父视图坐标系统中的位置和大小。bounds表示视图在它本身的坐标系统中的位置。如果修改bounds的origin会导致该视图的子视图位置发生改变,但不会影响视图本身的位置。一般来说,frame是由center和bounds计算得来。或者是说UIView的frame由它所拥有的CALayer的position、anchorPoint和bounds决定。

Ball

*ball

=

[[[[Ball

alloc]

init]

autorelease]

autorelease];给对象发送一次autorelease消息就会将它在自动释放池中注册一次。当自动释放池release或者drain的时候,将给注册到里面的对象按注册的次数发送release消息。因此最后ball对象会接收到两次release消息,由于ball的引用计数为1,当接收第一次release后就被释放了。第二次release的时候会导致程序崩溃。KVC是由NSKeyValueCoding非正式协议所实现的一种机制,使得应用程序可以通过名字或Key来访问对象的属性,而不是直接调用访问器或者实例变量。示例代码://

Copyright(c)2014年戴维营教育.Allrightsreserved.//#import

@class

DVIDog;@interface

DVIStudent

:

NSObject{@public

NSString

*_name;@protected

NSString

*_studentID;@private

float

_height;}//_age@property

(nonatomic,

assign)

int

age;@property

(nonatomic,

strong)

DVIDog

*dog;@property

(nonatomic,

strong)

NSMutableArray

*dogsArray;-

(void)printInfo;-

(void)setValueFromDict:(NSDictionary

*)dict;@end类的实现:////

DVIStudent.m//

KVCSample////

Copyright(c)2014年戴维营教育.Allrightsreserved.//#import"DVIStudent.h"#import"DVIDog.h"@implementation

DVIStudent-

(id)init{

if

(self

=

[super

init])

{

_dogsArray

=

[NSMutableArray

array];

}

return

self;}@synthesize

age

=

_age;-

(void)printInfo{

NSLog(@"%@:%@:%d:%f",

_name,

_studentID,

_age,

_height);}-

(void)setValueFromDict:(NSDictionary

*)dict{

_name

=

[dict

objectForKey:@"name"];

_age

=

[[dict

objectForKey:@"age"]

intValue];

_height

=

[[dict

objectForKey:@"height"]

floatValue];

_studentID

=

[dict

objectForKey:@"studentID"];}-

(void)setValue:(id)value

forUndefinedKey:(NSString

*)key{

NSLog(@"%@:%@",

key,

value);}-

(void)setNilValueForKey:(NSString

*)key{

NSLog(@"%@",

key);}-

(void)setAge:(int)age{

NSLog(@"age:%d",

age);

_age

=

age;

_height

+=

0.1;}-

(int)age{

return

_age;}@end第二个类://

Copyright(c)2014年戴维营教育.Allrightsreserved.//#import

@interface

DVIDog

:

NSObject@property

(nonatomic,

assign)

int

weight;@end第二个类的实现://

Copyright(c)2014年戴维营教育.Allrightsreserved.//#import"DVIDog.h"@implementation

DVIDog@end使用KVC访问属性:_student

=

[[DVIStudent

alloc]

init];//

student.age=20;[_student

setValue:@20

forKey:@"age"];_student->_name

=

@"Zhangsan";//1._key//2.key[_student

setValue:@"1001"

forKey:@"studentID"];[_student

setValue:@1.7

forKey:@"height"];[_student

printInfo];NSLog(@"%@",

[_student

valueForKey:@"age"]);NSDictionary

*dict

=

@{@"name":@"Lisi",@"studentID":@"2002",@"age":@33,@"height":@1.8};[_student

setValueFromDict:dict];[_student

printInfo];dict

=

@{@"name":@"Wangwu",@"studentID":@"3002",@"age":@23,@"height":@0.8};[_student

setValuesForKeysWithDictionary:dict];[_student

printInfo];DVIDog

*dog

=

[[DVIDog

alloc]

init];_student.dog

=

dog;_student.dog.weight

=

20;[_student

setValue:@30

forKeyPath:@"dog.weight"];NSLog(@"%@",

[_student

valueForKeyPath:@"dog.weight"]);[_student

setValue:@12

forKey:@"weight"];[_student

setNilValueForKey:@"age"];NSLog(@"%@",

[_student

valueForKey:@"age"]);KVC中除了访问单个属性外,还能够对集合属性进行访问和操作:for

(int

i

=

0;

i

<</span>

100;

++i)

{

DVIDog

*dog

=

[[DVIDog

alloc]

init];

dog.weight

=

i;

[_student.dogsArray

addObject:dog];}//NSLog(@"%@",

[_student

valueForKeyPath:@"dogsArray.@count"]);常用的集合操作:bash@avg,@max,@min,@count,@sum等

在KVC的基础上,苹果提供了KVO来获取属性改变的事件:添加KVO观察者:[_student

addObserver:self

forKeyPath:@"name"

options:

NSKeyValueObservingOptionNew

|

NSKeyValueObservingOptionOld

|NSKeyValueObservingOptionPrior

context:nil];观察者获取通知:-

(void)observeValueForKeyPath:(NSString

*)keyPath

ofObject:(id)object

change:(NSDictionary

*)change

context:(void

*)context{

NSLog(@"%@:%@:%@",

keyPath,

object,

change);

_nameLabel.text

=

[change

objectForKey:

NSKeyValueChangeNewKey];}5.

举例说明几个常用的Xcode环境变量。$(BUILT_PRODUCTS_DIR)构建成功后,目标文件存放的位置。$(TARGET_NAME)目标工程名。$(SRCROOT)工程文件存放的位置。$(CURRENT_PROJECT_VERSION)当前工程版本号。不应该对一个对象进行强引用。代理对象可能对被代理对象拥有强引用,如UITableViewController对它里面的tableView的引用。如果tableView的代理也是强引用的话,就会导致因为循环引用而出现内存泄漏。NSObject<-UIResponder<-UIView<-UIControl<-UIButton@synthesize编译器自动生成setter和getter。@dynamic需要手工实现setter和getter,并且不能在后面用=号标明对应的实例变量。@compatibility_alias给类起别名。@compatibility_alias

DVINewStudent

DVIStudent;@encode获取类型的字符串,可以用来判断类型。@encode(int)

//i@encode(CGRect)

//{CGRect={CGPoint=ff}{CGSize=ff}}@encode(DVIStudent)

//{DVIStudent=#}给对象发送延时执行的消息会对对象进行retain操作,并且在方法执

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论