我有一个类可以执行很少的转换,例如使用特定格式的NSDate转换为NSString等。
每个方法都是类方法,例如+[Tools humanReadableStringForDate:(NSDate*)date];
我有时需要我的方法+[Tools A]
来调用我班级的+[Tools B]
方法,但是在一个区块内。
我应该创建__block safeSelf = self;
还是不必要因为我使用类级方法?
编辑: 这是一个例子,而不是我的实际代码:
@implementation FileManager
+(void) uploadEveryFile:(void (^)(NSObject*))thingToDo :(NSArray*) fileArray {
for(NSString *s in fileArray) {
[[SomeWebAPI uploadFile:s withSuccess:^(NSNumber *responseCode) {
[self logUploadOk:s];
}];
}
}
+(void) logUploadOk:(NSString*)s {
NSLog(@"File upload ok : %@", s)
}
@end
我认为这会让事情更加清晰。我喜欢使用self
关键字,即使我可以使用类方法 - 在这个例子中我可以因为我在同一个类中并引用类级方法 - 因为它似乎更有意义,并且可以提供帮助如果我必须修改我的班级名称。
这样写它是否正确?它工作但不是真的正确吗?我是否真的需要使用logUploadOk
致电[FileManager logUploadOk:s]
?
谢谢!
答案 0 :(得分:3)
没有必要使用__block
或__weak
或类似的东西。您在类方法中讨论self
,它是类对象本身。类对象适用于整个程序,因此内存管理(如保留和释放)不起作用。所以你不必担心保留周期。
答案 1 :(得分:0)
+ (NSString *)A
{
NSString *something = [Tools B];
NSString *something = [self B]; // both are same inside class method
}
+ (NSString *)B
{
//..
}
答案 2 :(得分:-1)
这是不必要的,因为你使用的是类方法,而不是实例方法。要调用Class方法,请使用类名:[Tools doThisForMe]
。
但是,听起来你可以在这种情况下使用Objective-C Categories。它允许您扩展不同的类并使您的代码更具可读性,例如[myNSDate humanReadableString]
。
在你的情况下,它将遵循:
的NSDate + Human.h
@interface NSDate (Human)
- (NSString *)humanReadableString;
@end
的NSDate + Human.m
@implementation NSDate (Human)
- (NSString *)humanReadableString {
// do whatever you want.
// now 'self' refers to the NSDate instance
}
@end