Category & Extension

理解Objective-C的类扩展机制
本文深入探讨了Objective-C中的类扩展概念,包括其作用、应用方式以及与其他技术的区别,帮助开发者更好地理解和运用这一特性。

NSString+NewCategory.h

#import <Foundation/Foundation.h>

@interface NSString (NewCategory)

-(void) showNewCategory;

@end

main.m

#import <Foundation/Foundation.h>
#import "NSString+NewCategory.h"
/*
 1.category-和swift中的extension一样。
 category对于定义放的位置有严格的规定,元类名+Category名.h
 如下面的扩展NSString (NewCategory),必须放在头文件NSString+NewCategory.h中声明
 并且任何想使用这个扩展的文件中必须包含此头文件
 
 该扩展可以用于所有的NSString并且适用于其子类。
 
 2.✨✨由于扩展必须包含指定的头文件才有效,利用这个特性可以给相同的扩展实现不同的属性
 只需要将这些扩展放置到不同的文件中就可以了,用户需要用哪个扩展,就包含哪个头文件即可。
 
 3.注意,如果搞了重名的函数,则会出现问题。所以要考虑命名方法,尽量不要重复。
 4.category只能扩展函数,不能扩展属性。
 5.如果自己有类的源代码,可以进行编译,可以通过extension来扩展属性。extension和category的语法
 类似,只是括号中没有category名字,所以也被成为匿名category。扩展写在自己的类定义中即可。
 
 由于interface常被用作外部的公开接口,所以不能暴漏太多内容。而类扩展常常用来扩展一些自己类内部使用
 的功能,比如interface中只读的属性,可以在扩展为类内部可写的。
 6.有没有比扩展更好的方法?
 尽量用子类或者代理来做这些动作,减少扩展和category。
 */
@implementation NSString (NewCategory)

-(void) showNewCategory
{
    NSLog(@"This is new extension for NSString!");
}

@end

int main()
{
    NSString *s = [[NSString alloc] init];
    [s showNewCategory]; //这里会执行对NSString中的扩展。
    return 0;
}

/* 类扩展 */
//原始的类
@interface XYZPerson : NSObject
//readonly的变量,不会自动生成setter,不能通过self.var来修改,但是可以通过_varname来修改
//readonly的变量也不能通过[person readonlyVar] = xx, person.var = xxx来赋值。
@property (readonly) NSString *uniqueIdentifier;
- (void)assignUniqueIdentifier;
@end

//在类的外部,其他对象调用的时候,只能通过assignUniqueIdentifier函数修改
//不能通过class.var形式修改,那么可以进行扩展如下,readwrite是可选的,因为默认为只读的。
//在implementation的文件中添加如下扩展后,自己类的内部就可以直接进行赋值操作了。

@interface XYZPerson ()
@property (readwrite) NSString *uniqueIdentifier;
@end
(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 &ldquo;听歌历史 + 收藏偏好&rdquo; 展示 &ldquo;推荐歌单(每日 30 首)、新歌速递、相似曲风推荐&rdquo;,支持按 &ldquo;场景(通勤 / 学习 / 运动)&rdquo; 切换推荐维度。 播放页功能:支持 &ldquo;无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动&rdquo;,提供 &ldquo;沉浸式全屏模式&rdquo;(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 &ldquo;播放进度、收藏列表、歌单&rdquo; 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 &ldquo;歌曲名 / 歌手 / 歌词片段&rdquo; 搜索,提供 &ldquo;模糊匹配(如输入&lsquo;晴天&rsquo;联想&lsquo;周杰伦 - 晴天&rsquo;)、热门搜索词推荐&rdquo;,结果按 &ldquo;热度 / 匹配度&rdquo; 排序。 歌单管理:创建 &ldquo;公开 / 私有 / 加密&rdquo; 歌单,支持 &ldquo;批量添加歌曲、拖拽排序、一键分享到社交平台&rdquo;,系统自动生成 &ldquo;歌单封面(基于歌曲风格配色)&rdquo;。 音乐分类浏览:按 &ldquo;曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)&rdquo; 分层浏览,每个分类页展示 &ldquo;TOP50 榜单&rdquo;。 社交互动功能: 动态广场:查看 &ldquo;关注的用户 / 音乐人发布的动态(如&lsquo;分享新歌感受&rsquo;)、好友正在听的歌曲&rdquo;,支持 &ldquo;点赞 / 评论 / 转发&rdquo;,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 &ldquo;本周听歌 TOP10、累计听歌时长&rdquo;,平台定期生成 &ldquo;全球 / 好友榜&rdquo;(如 &ldquo;好友中你本周听歌时长排名第 3&rdquo;)。 音乐圈:加入 &ldquo;特定曲风圈子(如&lsquo;古典音乐爱好者&rsquo;)&rdquo;,参与 &ldquo;话题讨论(如&lsquo;你心中最经典的钢琴曲&rsquo;)、线上歌单共创&rdquo;。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 &ldquo;无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面&rdquo; 上传,填写 &ldquo;歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值