欢迎来到 IT实训基地-南通科迅教育
咨询电话:0513-81107100
iOS Runtime-OC黑魔法
2016/11/25
科迅教育
278
南通网页设计培训学校哪里靠谱-可免费试听

在项目中经常会发现一些奇怪的功能。不太能找的到代码的出处,但却实现了功能,很可能这是实用了运行时的东西。

运行时即Runtime 。使用起来很有意思。多了解也有助于对oc的理解。

这里我有写个关于Runtime 的demo https://github.com/WangFeiF/WFRuntime

 

在这个博客里只是demo的摘要。详细可以下载demo。查看源码

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
//
//  ViewController.m
//  Runtime
//
//  Created by 王飞 on 16/5/8.
//  Copyright © 2016年 com.wangfei. All rights reserved.
//
 
#import"ViewController.h"
#import<objc runtime.h="">
#import"WFPerson.h"
#import"UIImage+Swizzling.h"
 
@interfaceViewController ()
@property(weak, nonatomic) IBOutlet UIImageView *imageOrigin;
@property(weak, nonatomic) IBOutlet UIImageView *imageSwizzling;
 
@end
 
@implementationViewController
 
- (void)viewDidLoad {
    [superviewDidLoad];
    [self sendMessage];
     
    [self methodSwizzling];
}
 
- (void)sendMessage {
#pragma 消息机制
    Class classPerson  = objc_getClass("WFPerson");
     
    // 同过类创建实例对象
    // 如果这里报错,请将 Build Setting -> Enable Strict Checking of objc_msgSend Calls 改为 NO
    WFPerson *person = objc_msgSend(classPerson,@selector(alloc));
     
    person = objc_msgSend(person,@selector(init));
//    [person eat];
     
    objc_msgSend(person,@selector(runWithCount:),10);
    objc_msgSend(person,@selector(eat));
     
#pragma 动态关联方法
    /**
     *  person 对象并没有 sayHello 方法 这时候  用WFPerson 内部的hello 代替 sayHello
     */
    objc_msgSend(person,@selector(sayHello));
 
#pragma 消息转发
    /**
     *  person 发给stoke  的方法,通过黑魔法操作,转给了 touch
     */
    objc_msgSend(person,@selector(stoke));
}
 
#pragma 方法交换  详细操作  看UIImage+Swizzling的分类
- (void)methodSwizzling {
    UIImage *image = [UIImage imageNamed:@"hitLive"];
    _imageOrigin.image = image;
     
    NSLog(@"--------这是分界线---------");
     
    UIImage *imge = [UIImage tuc_imageNamedMethod:@"hitLive"];
    _imageSwizzling.image = imge;
}
 
 
 
@end
</objc>
77
关闭
先学习,后交费申请表
每期5位名额
在线咨询
免费电话
QQ联系
先学习,后交费
TOP
您好,您想咨询哪门课程呢?
关于我们
机构简介
官方资讯
地理位置
联系我们
0513-91107100
周一至周六     8:30-21:00
微信扫我送教程
手机端访问
南通科迅教育信息咨询有限公司     苏ICP备15009282号     联系地址:江苏省南通市人民中路23-6号新亚大厦三楼             法律顾问:江苏瑞慈律师事务所     Copyright 2008-