__kindof的用法

简介:

_kindof是苹果声明的一个新特性

使用方法如下:

正常我们声明一个属性:

@property (nonatomic,strong) NSArray       *viewArray;

看属性我们知道viewArray是一个存储UIView的数组,但是不能保证这个元素就是UIView,除非我们阅读完整的代码才会知道。

这种情况下我们通过泛型声明这个数组

@property (nonatomic,strong) NSArray<UIView *>       *viewArray;

这样我们就知道了声明的viewArray是一个存储UIView类型的数组,如果赋值为UIButton或者UIWebView这样的子类型时,编译则会报警告⚠️

为了解决这个问题,__kindof应运而生

@property (nonatomic,strong) NSArray<__kindof UIView *>       *viewArray;

用这种结构声明的viewArray,确保这个数组可以包含UIView以及UIView的子类型

 

我们要尽可能多的使用像__kindof这样苹果的新特性,是代码更加严谨,这样对我们的代码和应用大有益处。

 

转载于:https://www.cnblogs.com/it-q/p/8991868.html

`uvm_do_callbacks` 是 UVM 中一个非常强大的宏,可以用于执行一个或多个回调函数。回调函数是指在执行某个特定事件时,UVM 会自动去调用预先注册的用户定义的函数。这些回调函数可以用于各种用途,例如:在进行某项任务之前需要完成一些准备工作,或在任务完成之后需要执行一些清理工作等。 下面是 `uvm_do_callbacks` 的用法: ``` uvm_do_callbacks(uvm_object obj, uvm_cb_kind kind, uvm_callback cb) ``` 其中,`obj` 是一个 UVM 对象,`kind` 是一个枚举类型,指定回调函数的类型,`cb` 是一个用户定义的回调函数。 `uvm_cb_kind` 枚举类型定义了以下几种回调函数类型: - `UVM_CB_CREATE`: 在对象创建时调用 - `UVM_CB_BUILD`: 在对象构建时调用 - `UVM_CB_CONNECT`: 在对象连接时调用 - `UVM_CB_END_OF_ELABORATION`: 在 elaboration 结束时调用 - `UVM_CB_START_OF_SIMULATION`: 在仿真开始时调用 - `UVM_CB_END_OF_SIMULATION`: 在仿真结束时调用 - `UVM_CB_PHASE`: 在执行特定 phase 时调用 - `UVM_CB_DROP_OBJECT`: 在对象删除时调用 `cb` 是用户定义的回调函数,可以是一个 function 或者一个 task。回调函数的参数列表必须为 `(uvm_object obj, uvm_phase phase)`,其中 `obj` 表示当前对象,`phase` 表示当前执行的 phase。 以下是一个示例: ```verilog class my_cb extends uvm_callback; virtual function void exec(uvm_object obj, uvm_phase phase); $display("Callback function called for object %s in phase %s", obj.get_full_name(), phase.get_name()); endfunction endclass module top; initial begin my_obj obj = new(); uvm_do_callbacks(obj, UVM_CB_CREATE, new("my_cb")); end endmodule ``` 在上面的例子中,我们创建了一个名为 `my_cb` 的回调函数,并将其注册到一个名为 `obj` 的 UVM 对象上。当 `obj` 对象被创建时,`my_cb` 回调函数就会被调用,并输出一条消息。注意,我们使用 `new()` 关键字来创建回调函数的实例,并将其作为参数传递给 `uvm_do_callbacks` 宏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值