手把手教你怎么如何使用分类(category)

本文详细介绍如何在iOS开发中创建并使用分类(Category),通过实例解释其用途和优势,尤其适用于团队协作和复杂项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  • 本来是不想写这一篇的,因为自己研究也不到位,只会一些对于分类(category)的基本理解,肯定是不如参考文章这一篇写得好。
  • 但是呢,突然看到我旁边某位什么都懂的同学,在看了和我一样的参考文章后,依然是建了个四不像的文件
  • 虽然我估计这么笨的人也少有,但我还是写一篇博客介绍下简单直白的如何新建一个分类(category)吧

参考文章

分类(category)的用处和存在意义

  • 我们知道,如果想实现自定义label的话,需要新建一个继承于UILabel的类,并在创建UILabel时,直接创建新建的这个Label类
  • 我们可以在这个新的Label类里增加成员变量,方法等等
  • 而分类(category)可以理解为弱化版的新建类,在这个类里只能增加方法,而不能添加成员变量
  • 而他的好处是,只要import了该分类(category),只要是UILabel(label是用来举例的,任何UI控件都一个道理)都可以使用其中的方法,而不需要在单独创建新的label了
  • 而这在面对想多人合作或者比较复杂的项目时,显然还是非常方便好用的

详细步骤

  • 首先,新建一个Objective-C File,选择Category,名字取为UILabel+Category(你自定义的Category名,下文就以Category替代这个名字,比如可以取名叫做UILabel+LabelHeight)
//
//  UILabel+LabelHeight.h
//  zhihu-daily-ImitationDemo
//
//  Created by mac on 2018/11/23.
//  Copyright © 2018 姜凯文. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UILabel(LabelHeight)


@end


//
//  UILabel+LabelHeight.m
//  zhihu-daily-ImitationDemo
//
//  Created by mac on 2018/11/23.
//  Copyright © 2018 姜凯文. All rights reserved.
//

#import "UILabel+LabelHeight.h"

@implementation UILabel(LabelHeight)


/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

@end

  • 好了 这样就OK了 想加什么方法就加进去吧
  • 比如加了类方法,调用时只要[UILabel 类方法]就行了,轻松加愉快
  • 好吧,我也不懂怎么会有人学不会这个
  • 如果想看下怎么写比较好,看第三方库就行,基本里面都会用到这个
### 关于 nuScenes 数据集中 LidarSeg 和 Panoptic 的使用 nuScenes 是一个广泛使用的自动驾驶开源数据集,提供了丰富的传感器数据以及标注信息。LidarSeg 和 Panoptic 功能是该数据集中非常重要的部分。 #### 什么是 LidarSeg? Lidarseg 提供了激光雷达点云的逐点语义分割标签。这些标签可以帮助研究人员理解场景中的不同物体类别,例如车辆、行人和其他静态或动态障碍物[^1]。通过使用 lidarseg 标签,可以更高效地训练基于点云的目标检测模型或者语义分割网络。 以下是加载并处理 lidarseg 数据的一个简单 Python 脚本: ```python from nuscenes.nuscenes import NuScenes from nuscenes.lidarseg.lidarseg_utils import colormap_to_colors, plt_to_cv2, get_labels_in_coloring, \ map_name_to_general_index, paint_points_label import numpy as np nusc = NuScenes(version='v1.0-mini', dataroot='/path/to/your/dataset/', verbose=True) # 获取某个样本的数据 sample_token = 'a_sample_token' sample_record = nusc.get('sample', sample_token) lidar_data = nusc.get('sample_data', sample_record['data']['LIDAR_TOP']) # 加载 lidarseg 标签 lidarseg_mask_filename = nusc.get('lidarseg', lidar_data['token'])['filename'] lidarseg_labels = np.fromfile(f'{nusc.dataroot}/{lidarseg_mask_filename}', dtype=np.uint8) ``` 上述脚本展示了如何从指定 token 中提取 lidarseg 标签,并将其转换为 NumPy 数组以便进一步分析和可视化[^2]。 #### 什么是 Panoptic? Panoptic 功能扩展了 lidarseg 的能力,不仅提供逐点的语义分类,还增加了实例级别的区分。这意味着对于某些特定类别的对象(如汽车、自行车),除了知道它们属于哪个类别外,还可以识别出哪些点对应同一个具体实例[^3]。 下面是一个简单的例子来展示如何访问 panoptic 数据: ```python from nuscenes.panoptic.panoptic_utils import get_frame_panoptic_instances instances = get_frame_panoptic_instances(nusc, sample_token) for instance_id, (instance_tokens, category_name) in instances.items(): print(f'Instance ID {instance_id} corresponds to tokens {instance_tokens}, and is of type {category_name}.') ``` 此代码片段演示了如何获取帧内的所有实例及其对应的类别名称[^4]。 #### 可视化工具 为了更好地理解和调试数据,nuScenes 还提供了多种内置的可视化方法。例如 `render_pointcloud_in_image` 函数能够将点云投影到图像上并与相机视角同步显示;而 `explorer.render_scene` 则允许交互式探索整个场景的内容,包括 lidarseg 和 panoptic 结果[^5]。 ### 总结 通过对 nuScenes 数据集中 lidarseg 和 panoptic 部分的学习,研究者可以获得高质量的三维环境感知基础资源支持复杂算法开发需求。利用官方 API 接口可轻松实现数据读取、解析及初步可视化操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值