美文网首页
封装时断言(NSAssert)的简单使用

封装时断言(NSAssert)的简单使用

作者: 二营长开炮 | 来源:发表于2017-05-04 15:49 被阅读0次

开发时,通用功能为了以后的方便使用,通常将其封装起来放到公司的私有库当中,有些封装就需要一些必传的值,但是当别人用你的东西的时候他可能会忽略一些参数在调试的时候,那么这个时候这个东西就非常的有用.
我就举一个简单的例子:
首先创建一个模型 HJModel
在.h中

#import <Foundation/Foundation.h>

@interface HJModel : NSObject

- (void)test;

@end

在.m中

#import "HJModel.h"

@implementation HJModel

- (void)test{
    NSLog(@"---%@",[self key]);
}

- (NSString *)key
{
#ifdef DEBUG
    NSAssert(nil, @"弄一个子类, 重新返回key");
#endif
    
    return @"";

}

@end

然后创建一个子类

#import "HJSonModel.h"

@implementation HJSonModel

- (NSString *)key
{
    return @"我设置了一个key";
}

@end

在外面调用

#import "ViewController.h"
#import "HJModel.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    HJModel *model = [[HJModel alloc] init];
    [model test];
}

@end

这个时候运行你会发现:闪退了,为什么?因为这个时候你要用子类来调用了

- (void)viewDidLoad {
    [super viewDidLoad];
    HJSonModel *model = [[HJSonModel alloc] init];
    [model test];
}

这个时候你在运行会发现:
在父类中的这个self 是子类 HJSonModel

图片.png

这个时候你将子类中的

- (NSString *)key
{
    return @"我设置了一个key";
}

这几行代码注销掉会发生闪退,和上面的闪退是一个reason:

图片.png

但是这个时候这个self又是父类HJModel了,这就是消息的传递,运行时它在子类中没有找到这个方法,就会到父类中找,除非你直接用super.

这个东西在封装中比较有用,当然了这个NSAssert也有其他不少的用法,我就不一一叙述了.

第一次写简书,还有些小紧张,JJ都出汗了,肯定会有很多遗漏,大神请忽略我这个菜鸟写的屌丝东西,希望谅解.

相关文章

  • 封装时断言(NSAssert)的简单使用

    开发时,通用功能为了以后的方便使用,通常将其封装起来放到公司的私有库当中,有些封装就需要一些必传的值,但是当别人用...

  • HQ移动20170317期周报

    1. NSAssert() 和 NSCAssert()的使用 NSAssert()用于 OC 语法的断言NSCAs...

  • 断言NSAssert的使用

    1. NSAssert 断言(NSAssert)是一个宏,在开发过程中使用NSAssert可以及时发现程序中的问题...

  • 断言

    在iOS开发中,可以使用宏NSAssert()在程序中进行断言处理。NSAssert()使用正确,可以帮助开发者尽...

  • NSAssert断言的使用

    NSAssert()只是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否...

  • 断言(NSAssert)的使用

    NSAssert()是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属...

  • 断言NSAssert

    NSAssert与assert NSAssert和assert是断言,主要的差别是assert在断言失败的时候只是...

  • NSAssert断言

    NSAssert与assert NSAssert和assert是断言,主要的差别是assert在断言失败的时候只是...

  • 断言: NSAssert()

    格式 NSAssert(condition, desc, ...) 作用: condition 不为空时断言为真,...

  • NSAssert()使用目的

    转自iOS开发中断言的使用—NSAssert()[https://blog.csdn.net/univcore/a...

网友评论

      本文标题:封装时断言(NSAssert)的简单使用

      本文链接:https://www.haomeiwen.com/subject/zhxdtxtx.html