我正在尝试对UIViewController进行类别覆盖viewWillAppear:.但得到这个警告.
Category正在实现一种也可以在主类中实现的方法
@implementation UIViewController (ViewWillAppearCategory)
-(void)viewWillAppear:(BOOL)animated
{
//.........
}
@end
Run Code Online (Sandbox Code Playgroud)
我希望在视图中出现一些东西出现在所有屏幕上,所以我不想在所有屏幕上触摸.这就是为什么,选择类别.
我可以在子类中实现一些方法,我可以在所有VC(所有屏幕)中调用该方法.但我不想要这个.它会在视图中自动调用会出现调用.这是否有任何想法,或在上面做了任何错误?
注意:此代码仅出于某些测试目的而出现在开发阶段.所以我在使用app store时会删除此代码.因此,在移除过程中应该更容易完成任务,即我不会触摸所有屏幕.在提交到应用商店期间,我不会保留此代码.
我想使用类NSArray + Populate.h扩展一个类:
@interface NSArray (Populate)
-(NSArray *) populateArray;
@end
Run Code Online (Sandbox Code Playgroud)
如果有另一个类别(来自另一个模块或库),使用具有相同名称的方法扩展NSArray,如何检测情况?
例如,如果有NSArray + Fill.h:
@interface NSArray (Fill)
-(NSArray *) populateArray;
@end
Run Code Online (Sandbox Code Playgroud)
据我了解,运行时引擎会默默地选择其中一个版本,而不会发生任何崩溃?
我知道通过使用类别来覆盖方法是一种沮丧的做法.尽管如此,我还是要处理一些执行此操作的代码.当我运行以下代码时,我最初感到惊讶的是,在两种情况下都调用了我的类别方法,尽管考虑链接器必须如何在链接时为任何给定符号做出决定让我感觉更好.
我的问题:假设除了我创建的类别之外没有其他类别可用,我保证我的类别中的实现将始终是被调用的逻辑,只要它的标题是从某个地方导入的吗?
someObject.h
#import <Foundation/Foundation.h>
@interface SomeObject : NSObject
- (void)doSomething;
@end
Run Code Online (Sandbox Code Playgroud)
someObject.m
#import "SomeObject.h"
@implementation SomeObject
- (void)doSomething
{
NSLog(@"Original");
}
@end
Run Code Online (Sandbox Code Playgroud)
someObject + Cat.h
#import <Foundation/Foundation.h>
#import "SomeObject.h"
@interface SomeObject (SomeObject)
- (void)doSomething;
@end
Run Code Online (Sandbox Code Playgroud)
someObject + Cat.m
#import "SomeObject+Cat.h"
@implementation SomeObject (SomeObject)
- (void)doSomething
{
NSLog(@"New!");
}
@end
Run Code Online (Sandbox Code Playgroud)
someObjectUser.h
#import <Foundation/Foundation.h>
@interface SomeObjectUser : NSObject
- (void)useSomeObject;
@end
Run Code Online (Sandbox Code Playgroud)
someObjectUser.m
#import "SomeObjectUser.h"
#import "SomeObject.h"
@implementation SomeObjectUser
- (void)useSomeObject
{
[[SomeObject new] doSomething];
}
@end
Run Code Online (Sandbox Code Playgroud)
Test.m
- (void)testExample
{
[[SomeObject …Run Code Online (Sandbox Code Playgroud) 完全是客观C的新手,这个令人困惑的问题发生在我身上.所以在这里,
可以说我们有一个实现UITableViewDelegate的viewcontroller.如果我们扩展了这个viewcontroller,那么子类继承了UITableViewDelegate回调方法.因此我们可以从子类中覆盖某些回调,如cellForRowAtIndexPath等.
祝你有美好的一天
说A是B的子类
说A有一个类别doThis.
B也有一个类别doThis.
说我做了
B* b = [[B alloc]init];
[b doThis];
Run Code Online (Sandbox Code Playgroud)
是否有保证在B + doThis.h中声明的doThis将被称为A + doThis?
样品:
在NSManagedObject + somecategories.m中
+(void)vLoadBookmark
{
//Just empty
}
Run Code Online (Sandbox Code Playgroud)
后者
在BusinessObject + somecategories.m中,其中BusinessObject是NSManagedObject的子类
+(void)vLoadBookmark
{
//Do something
}
Run Code Online (Sandbox Code Playgroud)
如果有一天我打电话[someBusinessObject vLoadBookmark]//会做些什么吗?
感谢您的回复,例如我们有nsstring类,如果我们想要为该类添加方法,不需要为此创建类别,只是我们可以将它子类化,但为什么我们使用类别?请帮助这个