1.strong,weak关键字的作用和区别?实例说明。
strong关键字与retain关似,用了它,引用计数自动+1。
(weak和strong)不同的是
当一个对象不再有strong类型的指针指向它的时候 它会被释放 ,即使还有weak型指针指向它。
想象我们的对象是一条狗,狗想要跑掉(被释放)。
strong型指针就像是栓住的狗。只要你用牵绳挂住狗,狗就不会跑掉。如果有5个人牵着一条狗(5个strong型指针指向1个对象),除非5个牵绳都脱落 ,否着狗是不会跑掉的。
weak型指针就像是一个小孩指着狗喊到:“看!一只狗在那” 只要狗一直被栓着,小孩就能看到狗,(weak指针)会一直指向它。只要狗的牵绳脱落,狗就会跑掉,不管有多少小孩在看着它。
只要最后一个strong型指针不再指向对象,那么对象就会被释放,同时所有的weak型指针都将会被清除。
2.NSnotificationCenter 和Delegate 都是什么?在项目中如何选择呢 ?
两者的基本共同点:传递消息,做些什么。
二、NSNotificationCenter(通知中心,多对多)N v N的
1、获取通知中心的方法。
2、在中心注册消息接受者的方法。
- (void)addObserver: (id)anObserver
name:(NSString*)notificationName
object:
第四个参数为消息的发送者。
3、发送消息至中心的方法。
object:(id)anObject;
-(void) postNotificationName:(NSString *)notificationName
object:(id)anObject
userInfo:(NSDictionary *) info;
注:userInfo参数可使消息中传递更多的信息。
4、移除收听者的方法。
-
注意:每位收听者需在其相应的dealloc方法中将自己从通知中心中移除。
3.使用UITableViewCell时候,需要对cell进行重用,现在有三种不同类型的自定义cellA,cellB,cellC,如何保证table拖动时候不会出现不同的cell的控件发生重叠的情况?
如何实现 cell的重用?
主要是通过 UITableView的 “dequeueReusableCellWithIdentifier” 函数来实现,从字面上理解是“出列的可重用的cell”,其实简单说就是一个cell池,里面放的就是你之前创建过的cell。
注意点:
1,重取出来的cell是有可能已经捆绑过数据或者加过子视图的,如果有必要,要清除需要用与显示的数据和remove掉add过的子视图(使用 tag—viewWithTag 获取相关视图对象)。
2,原理就是为了避免频繁的 alloc和delloc cell对象。
3,设计的关键是实现cell和数据的完全分离。
介绍:一个屏幕显示的cell数量是有限的,当屏幕滚动时候,就会调用方法获取新的cell,而老的cell会在屏幕外面就不显示了。reuse机制就是这样,当cell需要显示的时候,从queue里面找,找到了,设置一下内容,显示出来。滚动界面当有cell被移出屏幕时,把这个cell丢到queue里面,显示新的cell时,如果有“相同类型”(identifier)的cell,就从队列拿一个出来,设置数据,显示出来,至于queue里面会有多少cell,这个会自动控制。
4.请写出代码创建一个UIButton,点击触发 showLogin方法。
UIButton *button = [UIButton alloc]init];
[button addTarget:self action:@selector(showLogin:) forControlEvents:UIControlTouchupInside];
UIButton *button = [[UIButton alloc]init];
[button addTarget:self action:@selector(showLogin:) forControlEvents:UIControlEventTouchUpInside];
5.简单写一下你知道的创建多线程的方式,越多越好
1)使用NSThread创建多线程。 detach:分离;派遣;使超然;
i:[NSThread detachNewThreadSelector:@selector(selector) toTarget:self withObject:something]; //类方法
ii:NSThread *myThread = [NSThread alloc]initWithTarget:self selector:(doSomething:) object:nil];
[myThread start]; //实例方法
2)NSInvocationOperation对象
NSInvocationOpreation *opreation = [NSInvocationOpreation alloc]initwithTarget:self selector: @selector(dosmeThing:) object: something];
[dequeue addOpreation: opreation];
3)GCD
disapatch_async(),^{
};
原文:http://blog.csdn.net/ministarler/article/details/19402771