Objective-C - 是否有可能在我的结构中有NSArray?
为我的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;
}
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;
}
为什么不直接声明一个NSObject子类一组'@ property'声明?它可以和ARC一起工作,当你需要添加一些附加在结构上的功能时,重构会容易得多。...... – bbum
不要在Objective-C中使用'struct's来存放NSObjects。它不起作用。运行时不会对它们进行内存管理,这意味着对象可能会在您最不期待的时候被释放。停止,不要这样做。 –
大概的此重复:http://stackoverflow.com/questions/2488877/using-c-structs-which-contains-objc-objects基本上为C包含Objective-C对象的结构是一个非常糟糕的想法(tm)(pat。pend。)。 – matt
'NSArray * struct_OSX.array_url = ...'根本没有意义。如果我纠正它,我不会得到任何诊断信息。什么是错误信息,以及你在哪个位置得到它?顺便说一句:代码只能工作,因为数组是用方便的分配器构造的,而且ARP没有关闭。这对你来说很清楚吗? –
工作我已经发布它作为答案。 – YumYumYum