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可能な場合はクラスメソッドにもキーワードを使用するのが好きです.私のクラス名。

では、このように書くのは正しいですか?それは機能していますが、本当に正しくありませんか? 本当に をlogUploadOk使用して呼び出す必要があり[FileManager logUploadOk:s]ますか?

ありがとうございました !

4

3 に答える 3

3

__blockなどを使用する必要はありません__weakselfクラスオブジェクト自体であるクラスメソッドで話しています。クラスオブジェクトはプログラム全体で存続するため、保持や解放などのメモリ管理は効果がありません。したがって、保持サイクルについて心配する必要はありません。

于 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

インスタンスメソッドではなくクラスメソッドを使用しているため、これは不要です。クラス メソッドを呼び出すには、クラス名: を使用します[Tools doThisForMe]

ただし、この場合、Objective-C カテゴリを使用できるようです。さまざまなクラスを拡張し、コードをより読みやすくすることができます[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
}

@終わり

于 2012-07-02T13:57:19.630 に答える