技术

iOSFoundation-NSProxy介绍

2023-03-10  本文已影响0人  萧修

NSProxy概念

NSProxy是一个抽象的超类,为充当其他对象或尚不存在的对象的代理对象定义API。通常,发送给代理的消息被转发到实际对象,或者导致代理加载真实对象,NSProxy的子类可用于实现透明的分布式消息传递或用于延迟实例化创建代价高昂的对象。

NSProxy用法

NSProxy实现了包括NSObject协议在内的基类所需的基础方法,但作为一个抽象的基类并没有提供初始化方法,它接受任何自己没有定义的方法它都会产生一个异常,所以它的子类必须提供初始化并创建方法,并且重载fowardinvacation

可作为消息重定向封装的抽象类,类似一个代理人,中间件,继承它。

解决NStime的循环引用问题
如下代码

//定时器代码
{
    GGXProxy *g = [GGXProxy proxyWithTarget:self];
    self.timer = [NSTimer timerWithTimeInterval:1.0 target:g selector:@selector(timeDid) userInfo:nil repeats:YES];
    [[NSRunLoop currentRunLoop]addTimer:self.timer forMode:NSRunLoopCommonModes];
}

//虚基类的核心代码
+ (instancetype)proxyWithTarget:(id)target {
    GGXProxy *x = [GGXProxy alloc];
    x.tar = target;
    return x;
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel {
    return [self.tar methodSignatureForSelector:sel];
}

- (void)forwardInvocation:(NSInvocation *)invocation {
    [invocation invokeWithTarget:self.tar];
}

算法题

//给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。
var s = "iletyetilode"
//s = "aabb"
var index = firstUniqChar(s)

print(index)

func firstUniqChar(_ s: String) -> Int {
    for i in 0..<s.count {
        //获取每个字符
        let ts = s[s.index(s.startIndex, offsetBy: i)]
        
        //判断
        let lsIndex = s.lastIndex(of: ts)
        let fiIndex = s.firstIndex(of: ts)
        
        if lsIndex == fiIndex {return i}
        
    }
    return -1
}

上一篇下一篇

猜你喜欢

热点阅读