1、使用delegate中的方法时,要检测实现delegate的类是否有实现delegate。
//respondsToSelector:检测
if([self.myCallbackDelegate respondsToSelector:@selector(delegateCallback:)]){
[self.myCallbackDelegate delegateCallback:key];
}
2、如果有多个地方需要用到安全检测,希望能够将此段安全检测的代码写入宏定义或者封装到工具类中。
-(void) safeSetObject:(id)anObject forKey:(id)aKey {
if (anObject && aKey) {
[self setObject:anObject forKey:aKey];
} else {
NSAssert2(NO, @"NSMutableDictionary invalid args safeSetObject:[%@] forKey[%@]", anObject, aKey);
}
}
3、如果在多线程的环境中操作可变容器,需要使用@synchronized() {}保证线程安全,并且需要安全检测。
@interface XGSDKres(){
NSMutableDictionary* _finishtasks;
}
@synchronized(self.finishtasks) {
}
4、使用代理定义对象时,记得属性用weak
//使用weak为了避免引用循环
@property(nonatomic, weak)id<DownFinishCallback> myCallbackDelegate;