gpt4 book ai didi

objective-c - 子类化 NSArray 和 NSMutableArray

转载 作者:搜寻专家 更新时间:2023-10-30 20:23:01 29 4
gpt4 key购买 nike

<分区>

NSArray 的引用文献和 NSMutableArray提到创建子类的可能性,但这只有通过提供您自己的后备存储和方法的实现才有可能

  • 计数

  • objectAtIndex:

对于NSArray,以及

  • insertObject:atIndex:

  • removeObjectAtIndex:

  • 添加对象:

  • removeLastObject

  • replaceObjectAtIndex:withObject:

对于 NSMutableArray。这可能会产生误导,因为它会让程序员认为不可能通过简单的方法来子类化 NSArrayNSMutableArray

认为不可能创建它们的“简单”子类来利用现有的后备存储(即使您不直接访问它们),但仍然可以通过一些“解决方法”实现。

所以当我在寻找仍然能够对它们进行子类化的可能性时,我有一个简单的想法:只需创建子类并使用 NSArrayNSMutableArray 的实例作为后备存储。

这是它的工作原理:

CSSMutableArray.h

#import <Foundation/Foundation.h>


@interface CSSMutableArray : NSMutableArray {
NSMutableArray *_backingStore;
}

@end

CSSMutableArray.m

#import "CSSMutableArray.h"


@implementation CSSMutableArray

- (id) init
{
self = [super init];
if (self != nil) {
_backingStore = [NSMutableArray new];
}
return self;
}

- (void) dealloc
{
[_backingStore release];
_backingStore = nil;
[super dealloc];
}

#pragma mark NSArray

-(NSUInteger)count
{
return [_backingStore count];
}

-(id)objectAtIndex:(NSUInteger)index
{
return [_backingStore objectAtIndex:index];
}

#pragma mark NSMutableArray

-(void)insertObject:(id)anObject atIndex:(NSUInteger)index
{
[_backingStore insertObject:anObject atIndex:index];
}

-(void)removeObjectAtIndex:(NSUInteger)index
{
[_backingStore removeObjectAtIndex:index];
}

-(void)addObject:(id)anObject
{
[_backingStore addObject:anObject];
}

-(void)removeLastObject
{
[_backingStore removeLastObject];
}

-(void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject
{
[_backingStore replaceObjectAtIndex:index withObject:anObject];
}

@end

如果你想继承 NSArray,你只需要提供标题为 NSArray 的部分。您现在可以从“自定义 NSArray 子类的实现”继承并按您的意愿工作。

希望这有助于...和平!

托门 =)

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com