2010-10-06 42 views
7

Tôi có lớp A là lớp siêu hạng cho cả lớp B và lớp C. Tôi cần lưu trữ các đối tượng của lớp A trong NSMutablearray 'tĩnh' được định nghĩa trong lớp A. Có thể sửa đổi dữ liệu được lưu trữ trong MSMutableArray bằng các phương thức trong lớp hay không B và lớp C? Làm thế nào để tạo và khởi tạo mảng tĩnh? Một ví dụ sẽ giúp ích nhiều hơn. cảm ơn trước.Làm thế nào để tạo một NSMutableArray tĩnh trong một lớp trong mục tiêu c?

Trả lời

14

Đây là một cách để thực hiện.

@interface ClassA : NSObject 
{ 
} 

-(NSMutableArray*) myStaticArray; 

@end 

@implementation ClassA 

-(NSMutableArray*) myStaticArray 
{ 
    static NSMutableArray* theArray = nil; 
    if (theArray == nil) 
    { 
     theArray = [[NSMutableArray alloc] init]; 
    } 
    return theArray; 
} 

@end 

Đó là mẫu mà tôi sử dụng khá nhiều thay vì những người độc thân thực sự. Các đối tượng của ClassA và các lớp con của nó có thể sử dụng nó như sau:

[[self myStaticArray] addObject: foo]; 

Có các biến thể bạn có thể xem xét ví dụ: bạn có thể làm cho phương thức một phương thức lớp. Bạn cũng có thể muốn tạo chủ đề phương thức an toàn trong môi trường đa luồng. ví dụ.

-(NSMutableArray*) myStaticArray 
{ 
    static NSMutableArray* theArray = nil; 
    @synchronized([ClassA class]) 
    { 
     if (theArray == nil) 
     { 
      theArray = [[NSMutableArray alloc] init]; 
     } 
    } 
    return theArray; 
} 
+0

điều này sẽ không gây ra rò rỉ bộ nhớ cho theArray? – tbag

+0

Nó sẽ không bị rò rỉ chút nào - theArray được định nghĩa là mảng tĩnh, do đó nó sẽ khởi tạo đối tượng này chỉ một lần. – deathhorse

+0

@JeremyP vừa tìm thấy điều này ngay bây giờ. Chỉ muốn nói lời chúc mừng vì điều này. Giải pháp tuyệt vời! –

Các vấn đề liên quan