2011-12-08 36 views
9

tôi sử dụng đoạn mã sau để tạo ra một mảng public static trong C#mảng tĩnh trong mục tiêu C

public class A{ 
    public static array[] obj; 
} 

Tôi có một lớp B. Từ lớp BI gọi A.ArrayName và tôi nhận được mảng tôi sử dụng trong lớp học A.

Tôi muốn biết điều gì tương đương với điều này trong mục tiêu C

Trả lời

18

Không có cú pháp đặc biệt cho điều này. Bạn chỉ cần định nghĩa một phương thức lớp để trả về mảng tĩnh.

Ví dụ:

@implementation A // note this is in the implementation 

static NSArray *array; 

+ (NSArray *)array 
{ 
    if (!array) 
    array = [[NSArray alloc] init]; 

    return array; 
} 

@end 

Hoặc cho mã Messier, nhưng hiệu suất tốt hơn một chút (một ý tưởng tốt trong một vòng lặp chặt chẽ, nhưng thường không có giá trị):

@implementation A 

static NSArray *array; 

+ (void)initialize // this method is called *once* for every class, before it is used for the first time (not necessarily when the app is first launched) 
{ 
    [super initialize]; 

    array = [[NSArray alloc] init]; 
} 

+ (NSArray *)array 
{ 
    return array; 
} 

@end 

Để truy cập nó từ lớp B bạn chỉ cần thực hiện: [A array]

+2

Nếu bạn cần khởi tạo an toàn luồng và vẫn muốn làm điều đó một cách lười biếng, dispatch_once() là một cách hay để thực hiện. –

+0

Hmm Tôi chưa bao giờ nghĩ về điều đó. Ý tưởng tốt. –

+0

xem mã của tôi cho dispatch_once() – vikingosegundo

5

Tôi muốn đề xuất sử dụng Danh mục trên NSArray. Tôi đã thay đổi yêu cầu của bạn một chút để sử dụng NSMutableArray làm đối tượng được chia sẻ.

tập tin giao diện:

#import <Foundation/Foundation.h> 

@interface NSArray (StaticArray) 
+(NSMutableArray *)sharedInstance; 

@end 

tập tin thực hiện

#import "NSArray+StaticArray.h" 

@implementation NSArray (StaticArray) 

+(NSMutableArray *)sharedInstance{ 

    static dispatch_once_t pred; 
    static NSMutableArray *sharedArray = nil; 
    dispatch_once(&pred, ^{ sharedArray = [[NSMutableArray alloc] init]; }); 
    return sharedArray; 
} 
@end 

Bây giờ bạn có thể sử dụng nó như:

[[NSArray sharedInstance] addObject:@"aa"]; 
[[NSArray sharedInstance] addObject:@"bb"]; 
[[NSArray sharedInstance] addObject:@"cc"]; 

và ở một nơi khác:

NSLog(@"%@", [NSArray sharedInstance]);