Rad*_*adu 0 iphone objective-c
我有一个函数,通过引用实现任何类型的对象
-(BOOL)RemoteCall:(id**)DataClass;
我使用[*DataClass isMemberOfClass:[NSMutableArray class]来找出对象的类型.问题是它不适用于NSMUtableArrays有没有人有这个问题的解决方案?这是相关代码:
执行:
-(BOOL)RemoteCall:(id**)DataClass
{
if([*DataClass isMemberOfClass:[NSMutableArray class] ] == YES)
{
NSMutableArray * SW =(NSMutableArray *)*DataClass;
//do something with SW
DataClass= (id**)SW;
return TRUE;
}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,我的意思是任何事情都会受到赞赏,我被困住了.
Method Call:
NSMutableArray * channelArray = [[NSMutableArray alloc]init]
Services * serv = [[Services alloc] init];
return [serv RemoteCall:&channelArray];
Run Code Online (Sandbox Code Playgroud)
bbu*_*bum 15
该代码存在许多问题.
(id**)是指向指向对象的指针的指针.可能根本不是你想要的.
YES并且NO是BOOL返回类型; 不TRUE
该代码没有理由通过引用返回某些内容.
方法名称以小写字母开头.争论也是如此.
NSMutableArray应用程序中永远不会有实例; 只是子类
你不能在一开始就区分出一个可变数组和一个不可变数组; 检查isKindOfClass:或isMemberOfClass:对于NSMutableArray不会做你多好(这是有用的,但误导).
这个更好:
-(BOOL)remoteCall: (id) dataThing
{
if([dataThing isKindOfClass:[NSMutableArray class]] == YES)
{
NSMutableArray *swArray = dataThing; // not strictly necessary, but good defensive practice
//do something with swArray
return YES;
}
return NO;
}
Run Code Online (Sandbox Code Playgroud)
被称为:
NSMutableArray * channelArray = [[NSMutableArray alloc]init]; // you'll need to release this somewhere
Services * serv = [[Services alloc] init];
return [serv remoteCall:channelArray];
Run Code Online (Sandbox Code Playgroud)
由于您没有返回其他数组remoteCall:,channelArray因此方法将操作内容,并返回YES/NO返回值.
如果有一些原因导致上述似乎不适合您,请解释原因.
注意:代码显然需要一个,NSMutableArray如果你要弄脏内容.该isKindOfClass:可检查NSMutableArray或者NSArray它不会有问题两种方式.在代码中使用数组并需要一个可变数组时,由您来确保数据流是正确的,这样您就不会在需要可变数组的情况下使用不可变数组.
| 归档时间: |
|
| 查看次数: |
845 次 |
| 最近记录: |