当前位置:  开发笔记 > IOS > 正文

Objective-C中的类别用法

如何解决《Objective-C中的类别用法》经验,为你挑选了1个好方法。

我看到一些我继承的代码如下所示:

@interface SomeClass (private)

这是在SomeClass.m实现文件中.有一个附带的头文件,不建议该类使用类别.是(private)在这种情况下只是一个可怜的名字给一个类别SomeClass?我假设在实现中指定类似这些类别是完全合法的吗?



1> Abizern..:

它不是私有的名称"私人"; 这些方法是私有的,因为它们属于在实现文件中声明的类别.

类别有三种用法,每种用法都向类添加方法(注意:仅限方法,而不是iVars)

扩展现有的Cocoa类

这允许您将自己的方法添加到现有类.例如,如果要扩展NSString以应用特殊大小写,则可以创建一个名为NSString + Capitals的新类.在NSString + Capitals.h中你会得到:

@interface NSString (Capitals)

-(NSString *)alternateCaps:(NSString *)aString;

@end

在NSString + Capitals.m中,您将实现该方法

@implementation NSString (Capitals)
-(NSString *)alternateCaps:(NSString *)aString
{
    // Implementation
}

类上的私有方法

这与上面相同,只是在实现文件中声明和定义了额外的方法(.m)通常是一种拥有私有方法的方法 - 因为它们不在.h文件中(这是其他#imported)他们根本不可见.在这种情况下,方法的实现在它们自己的实现块中完成.例如

// someClass.m
@interface someClass (extension)
-(void)extend;
@end

@implementation someClass
    // all the methods declared in the .h file and any superclass
    // overrides in this block
@end

@implementation someClass (extension)
-(void)extend {
    // implement private method here;
}

类扩展(10.5 Leopard的新功能)

一种更简单的私有方法.在这种特殊情况下,类别名称为空,并且私有方法在与所有其他类方法相同的块中实现.

// someClass.m
@interface someClass ()
-(void)extend;
@end

@implementation someClass
    // all the methods declared in the .h file and any superclass
    // overrides in this block
    // Implement private methods in this block as well.
-(void)extend {
    // implement private method here;
}

@end

这是Apple类别和扩展文档的链接.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有