3

我有一个类来执行一些小的转换,比如 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的情况下对类方法使用关键字——在这个例子中我可以,因为我在同一个类中并引用一个类级别的方法——因为它似乎更有意义,如果我必须修改它会很有帮助我的班级名称。

那么这样写是否正确?它是否有效但并不正确?我真的需要打电话logUploadOkusing[FileManager logUploadOk:s]吗?

谢谢 !

4

3 回答 3

3

没有必要使用__block__weak类似的东西。您正在谈论self类方法,即类对象本身。类对象存在于整个程序中,因此像保留和释放这样的内存管理对它没有任何影响。因此,您无需担心保留周期。

于 2012-07-02T23:07:44.443 回答
0
+ (NSString *)A
{
    NSString *something = [Tools B];
    NSString *something = [self B]; // both are same inside class method
}
+ (NSString *)B
{
//..
}
于 2012-07-02T14:06:57.570 回答
-1

这是不必要的,因为您使用的是类方法,而不是实例方法。要调用 Class 方法,请使用类名:[Tools doThisForMe].

但是,在这种情况下,听起来您可以使用Objective-C 类别。它将允许您扩展不同的类并使您的代码更具可读性,例如[myNSDate humanReadableString].

在您的情况下,它将遵循以下原则:

NSDate+人类.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
}

@结尾

于 2012-07-02T13:57:19.630 回答