2017-03-08 29 views
-1

为我的OSX和iOS库。Objective-C - 是否有可能在我的结构中有NSArray?

我试图在我的struct中保留array。但不幸的是NSArray *array_url;里面的struct不允许Xcode。

但是,当我删除__unsafe_unretained NSArray *array_url并把它放在主块,然后其确定(但这不是我的目标),是不可能把数组放在结构?

#import <Foundation/Foundation.h> 

struct OSX { 
    __unsafe_unretained NSString *input_url; 
    __unsafe_unretained NSString *use_url;  
    __unsafe_unretained NSArray *array_url; //USE it later in other place 

}; 

int main(int argc, const char * argv[]) { 
    @autoreleasepool {  
    struct OSX struct_OSX; 
    struct_OSX.input_url = @"test1:test2:test3:..:..:99:9900"; 

    NSArray *struct_OSX.array_url = [struct_OSX.input_url componentsSeparatedByString:@":"]; 
    NSLog(@"%@", struct_OSX.array_url); 

    for(NSArray *subArray in struct_OSX.array_url) { 
     NSLog(@"%@", subArray);  
    } 

    NSLog(@"%@", [struct_OSX.array_url objectAtIndex:1]);    
    // let me validate the array: if ([struct_OSX.array_url length] == 0) { } 

    } 

    return 0; 

} 
+0

大概的此重复:http://stackoverflow.com/questions/2488877/using-c-structs-which-contains-objc-objects基本上为C包含Objective-C对象的结构是一个非常糟糕的想法(tm)(pat。pend。)。 – matt

+1

'NSArray * struct_OSX.array_url = ...'根本没有意义。如果我纠正它,我不会得到任何诊断信息。什么是错误信息,以及你在哪个位置得到它?顺便说一句:代码只能工作,因为数组是用方便的分配器构造的,而且ARP没有关闭。这对你来说很清楚吗? –

+0

工作我已经发布它作为答案。 – YumYumYum

回答

-2

struct与NSArray的

#import <Foundation/Foundation.h> 

struct iOS { 
    __unsafe_unretained NSString *input_url; 
    __unsafe_unretained NSString *use_url; 
    __unsafe_unretained NSString *server; 
    __unsafe_unretained NSString *agent; 
    __unsafe_unretained NSString *roomid; 
    __unsafe_unretained NSArray *array_url; 
    __unsafe_unretained NSArray *array_url_modified; 
}; 

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 
    struct iOS StructIOS; 
    StructIOS.input_url = @"https://a/b/c"; 

    //NSArray *work_array = [StructIOS.input_url componentsSeparatedByString:@"https://"]; 
    StructIOS.array_url = [StructIOS.input_url componentsSeparatedByString:@"https://"]; 
    NSLog(@"%@", StructIOS.array_url); 

    for(NSArray *subArray in StructIOS.array_url) { 
     NSLog(@"%@", subArray); 
    } 

    NSLog(@"%@", [StructIOS.array_url objectAtIndex:1]); 
    StructIOS.use_url =[StructIOS.array_url objectAtIndex:1] ; 

    if ([StructIOS.use_url length] > 0) { 
     StructIOS.array_url_modified = [StructIOS.input_url componentsSeparatedByString:@"/"]; 
     StructIOS.server = [StructIOS.array_url_modified objectAtIndex:0]; 
     StructIOS.agent = [StructIOS.array_url_modified objectAtIndex:1]; 
     StructIOS.roomid = [StructIOS.array_url_modified objectAtIndex:2]; 

     NSLog(@"OK %@ %@ %@" , 
      StructIOS.server, 
      StructIOS.agent, 
      StructIOS.roomid); 
    } 
    else { 
     NSLog(@"NOK"); 
    } 
    } 

    return 0; 
} 
+3

为什么不直接声明一个NSObject子类一组'@ property'声明?它可以和ARC一起工作,当你需要添加一些附加在结构上的功能时,重构会容易得多。...... – bbum

+3

不要在Objective-C中使用'struct's来存放NSObjects。它不起作用。运行时不会对它们进行内存管理,这意味着对象可能会在您最不期待的时候被释放。停止,不要这样做。 –

相关问题