ios面试题(1)

一、以下代码能不能执行成功?如果可以,打印结果是什么?

// Person.h
#import 
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
- (void)test;
@end

// Person.m
#import "Person.h"
@implementation Person
- (void)test
{
    NSLog(@"test print name is : %@", self.name);
}
@end
// ViewController.m
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    
    id cls = [Person class];
    void *obj = &cls;
    [(__bridge id)obj test];
}

答:可以打印成功,打印结果test print name is :
原理解析:
1、id cls = [Person class]; void *obj = &cls; [(__bridge id)obj test];结构解析

image.png

2、 [super viewDidLoad];内部objc_super2结构体内存储如下

struct objc_super = {
    self,
    [ViewController Class]
};

3、局部变量在栈空间内是由高地址向低地址连续存储的


屏幕快照 2018-07-16 下午12.07.15.png

三、下面代码的打印结果是什么

 NSMutableString *str = [NSMutableString stringWithString:@"zjy"];
 NSMutableDictionary *mutDic = [NSMutableDictionary dictionary];
 mutDic[@"name"] = str;
 [str appendString:@"xxx"];
 NSLog(@"%@",mutDic[@"name"]);

打印结果:zjyxxx

四、以下哪些类跟UIView有继承关系(直接、间接的父类或子类)?(A/D)

A. UIControl //继承自UIView
B. UIGestureRecognizer //继承自NSObject
C. CALayer //继承自NSObject
D. UIResponder //UIView的父类

五、以下哪些方法可能改变UIView *v的frame?

A. [v setClipsToBounds:newBool];
B. [v setBounds:newBounds];
C. [v setTransform:newTransform];
D. [v setCenter:newCenter];

六、关于iOS App 中CALayer描述正确的是?

A. CALayer可以相应基本的点击事件
B. CAAnimation 使用GPU,而UIView animation使用CPU
C. CALayer的contents只可以显示CGImageRef
D. CALayer之前没有层级关系,而UIView有

你可能感兴趣的:(ios面试题(1))