Swift与Objective-C混编调试杂记

2018-06-02  本文已影响0人  Anyeler

简介】在2016年底前后一直在做智能家居APP,这个项目是利用 Objective-C 和 Swift 混编,至今看来混编会出现很多奇奇怪怪的问题。


遇到的代码问题以及解决方案

解决方案:

(1)在 Swift 中,必须对映射过来的OC对象属性进行判空。
(2)在 Swift 中,不方便判空的话,可以当做可选项(?)使用,在 swift2.3 中不会报错。

问题伪代码:

- (void)oneAnimating
{
    [UIView animateWithDuration:kDuration animations:^{
        //动画执行代码
        } completion:^(BOOL finished) {
        [weakSelf twoAnimating];
    }];
} 

- (void)twoAnimating
{
    [UIView animateWithDuration:kDuration animations:^{
        //动画执行代码
        } completion:^(BOOL finished) {
        [weakSelf oneAnimating];
    }];
}

解决方案:

动画改用轻量级视图层动画(layer)主要优点:
1. 防止互调出现的循环引用
2. 减少CPU负担,提高性能

为了保险起见,可以再 deinit/dealloc 中调用去掉动画的方法

写代码的一些注意事项以及建议

(1)把数据源以及委托代码放到 View 或者 UItableView 的子类里。
(2)复用所在控制器里的代理方法,也就是复用主Tableview的代理方法,在VC 中的代理方法里分类处理。

调试技巧

例子代码:

@interface TCustomProtocol : NSURLProtocol

@end

@implementation TCustomProtocol

+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
     //可在这里打个断点监听
    return NO;
}

@end

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
   
    [NSURLProtocol registerClass:[TCustomProtocol class]];
    
    return YES;
}
@end
上一篇 下一篇

猜你喜欢

热点阅读