Skip to content

🚀使用分类 (category)和扩展(Extension)

Notifications You must be signed in to change notification settings

CooFree/Category

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 

Repository files navigation

⭐️⭐️

Category

  • 有两方面局限性:
    • 无法向类中添加新的实例变量,类别没有位置容纳实例变量。
    • 名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级。类别方法将完全取代初始方法从而无法再使用初始方法。
  • 主要有3个作用:
    • 可以将类的实现分散到多个不同文件或多个不同框架中,方便代码管理。也可以对框架提供类的扩展(没有源码,不能修改)。
    • 创建对私有方法的前向引用:如果其他类中的方法未实现,在你访问其他类的私有方法时编译器报错这时使用类别,在类别中声明这些方法(不必提供方法实现),编译器就不会再产生警告
    • 向对象添加非正式协议:创建一个NSObject的类别称为“创建一个非正式协议”,因为可以作为任何类的委托对象使用。

Extension

  • Extension常被称为是匿名的Category(比如:在字符串中类扩展extension,添加的属性str1和show方法都是私有的,只能在String类中可以访问得到 )
  • 用于给类添加新方法,但只作用于原始类,不作用于subclass
  • 只能对有implementation源代码的类写Extension,对于没有implementation源代码的类,比如framework class,是不可以的
    Extension可以给原始类添加新方法,以及新属性

他们的主要区别是:

  1. 形式上来看,extension是匿名的category。
  2. extension里声明的方法需要在mainimplementation中实现,category不强制要求。
  3. extension可以添加属性(变量),category不可以。


  • CAAnimation

    • CAAnimation+CooFree
    [self.iconImageV.layer addAnimation:[CAAnimation rotationAnim] forKey:@"rotationAnim"];//翻转
    [self.layer addAnimation:    [CAAnimation rotaAnim] forKey:@"rotaAnim"];//旋转
    [self.iconImageV.layer addAnimation:[CAAnimation shakeAnim] forKey:@"shakeAnim"];//抖动
    

  • UIDevice

    • UIDevice+JYInfo
    // 设备的名称
    + (NSString *)getDeviceName;
    
    // 设备类型
    + (NSString *)getDeviceTypeName;
    
    // 获取BundleID
    + (NSString*)getBundleID;
    
    // app版本号
    + (NSString *)getAPPVerion;
    
    // app_build版本号
    + (NSString *)getAPPBuildVersion;
    
    // app名字
    + (NSString *)getAPPName;
    
    // 设备UUID
    + (NSString *)getiPhoneUUID;
    
    // 设备系统版本
    + (NSString *)getSystemVersion;
    
    // 获取电池剩余电量
    + (CGFloat)getBatteryLevel;
    
    // 获取手机IP
    + (NSString *)getDeviceIPAdress;
    
    // 获取总内存大小(单位:字节 B)
    + (long long)getTotalMemorySize;
    
    // 获取当前可用内存(单位:字节 B)
    + (long long)getAvailableMemorySize;
    
    // 获取总磁盘容量(单位:字节 B)
    + (long long)getTotalDiskSize;
    
    // 获取可用磁盘容量(单位:字节 B)
    + (long long)getAvailableDiskSize;
    
    // 获取精准电池电量
    + (CGFloat)getCurrentBatteryLevel;
    
    // 获取当前语言
    + (NSString *)getDeviceLanguage;
    
    // 获取运营商名称
    + (NSString *)getCarrierName;
    
    // 获取网络类型(确保statusbar没有隐藏,否则获取不到)
    + (NetworkType)getNetworkType;
    
    // 获取网络类型名称(确保statusbar没有隐藏,否则获取不到)
    + (NSString *)getNetworkTypeName;
    
  • UIApplication

    • UIApplication+JYHandle
    // 应用程序之间跳转(如调起电话:tel://1234567890 )
    + (void)quickOpenURLString:(NSString *)urlString;
    
    // 跳转到app设置页面
    + (void)goToAppSetting;
    
    // 拨打电话
    + (void)goToTelephone:(NSString *)telephone;
    
    // 跳转系统设置中相关功能的设置
    + (void)goToSettingWith:(JYPrefsType)prefsType;
    
  • UIColor

    • UIColor+JYCommon
    // 根据十六进制数 生成颜色类 如:0xff1fb6c1
    + (UIColor *)colorWithCode:(NSUInteger)hex;
    // 根据RGBHex 生成颜色类 如:000000
    + (UIColor *)colorWithRGBHexStr:(NSString *)str;
    //随机颜色
    + (UIColor *)getJYRandomColor;
    
  • UIView

    • UIView+CFAnimation
    - (void)fadeInWithTime:(NSTimeInterval)time;   //淡入
    - (void)fadeOutWithTime:(NSTimeInterval)time;  //淡出
    - (void)scalingWithTime:(NSTimeInterval)time andscal:(CGFloat)scal;    //缩放
    - (void)RevolvingWithTime:(NSTimeInterval)time andDelta:(CGFloat)delta;//旋转
    
  • UIScrollView

    • UIScrollView+CFParallaxHeader //tableView头部放大
    [self.tableView addParallaxHeadView:self.topView];
    
  • UIImage

    • UIImage+ImageEffects //模糊透明背景图
    UIImage*blurSnapshotImage=[image applyBlurWithRadius:5.0f 
                                               tintColor:[UIColor colorWithWhite:0.2f alpha:0.7f] 
                                               saturationDeltaFactor:1.8f   
                                               maskImage:nil];
    
  • UIImageView

    • UIImageView+CornerRadius //任意切角
    UIImageView*imageView=[[UIImageView alloc]initWithRoundingRectImageView];
    UIImageView*imageViewSecond=[[UIImageView alloc]initWithCornerRadiusAdvance:20.f 
                                                                     rectCornerType:UIRectCornerBottomLeft | UIRectCornerTopRight];
    
  • UILabel

    • UILabel+Addition //一句代码创建
    + (instancetype)labelWithFont:(UIFont*)font  
                        textColor:(UIColor*)textColor
                        textAlignment:(NSTextAlignment)textAlignment;
    
  • NSDate

    • NSDate+JYHandle
    //判断与某一天是否为同一周
    - (BOOL)sameWeekWithDate:(NSDate *)otherDate;
    //判断与某一天是否为同一月
    - (BOOL)sameMonthWithDate:(NSDate *)otherDate;
    
  • NSTimer

    • NSTimer+Weak
    // 计时器SEL(弱引用,页面销毁可以不用手动释放计时器)
    + (NSTimer *)weakTimerWithTimeInterval:(NSTimeInterval)interval
                                  target:(id)aTarget
                                selector:(SEL)aSelector
                                userInfo:(id)userInfo
                                 repeats:(BOOL)repeats;
    

https://github.com/leeSmile/tools/tree/master/textTools

About

🚀使用分类 (category)和扩展(Extension)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published