1.retainCount引用问题
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
label.text = @"retailCount";
[label autorelease];
NSLog(@"----label------%ld",(long)[label retainCount]);// ----label------1
[self.view addSubview:label];
NSLog(@"----label------%ld",(long)[label retainCount]);//----label------2
第一处因为label到autorelease处释放,所以retainCount为1,
第二处因为self.view对label的持有,所以retainCount+1为2;
2.
unsigned int i = 0x123456ab;
unsigned char *pi = (unsigned char *)&i;
for (int i=0; i
输出结果为:AB563412
0x123456ab;要占四个字节,12 34 56 ab 分别占一个字节,计算机存储是反向输出的。字节序---大尾端---小尾端 。
3.
char *j = "jdms\0";
printf("\n%lu,%lu",strlen(j),sizeof(j));
输出结果:
4,8
看此博客有详细解释
3.解释可重入和线程安全,举例说明
看此博客有详细解释
4.memmove算法实现
看此博客有详细解释
5.下题是否有误,如何改正
void swipe(int *p1,int *p2){
int *p;
*p = *p1;
*p1 = *p2;
p2 =p;
}
答案:错误
解析:指针没有初始化,改正办法:
int p;申明了一个指针变量p,要使用p,必须让p指向一个内存单元,否则,p就是野指针你有两种方法。
1.栈
void swap(int *p1, int *p2)
{
int x;//自动变量x属于栈
int *p=&x;
*p=*p1;
*p1=*p2;
*p2=*p;
}
这种方法纯属蛋疼。
2.堆
void swap(int *p1, int *p2)
{
int *p=(int*)malloc(sizeof(int)); //堆
*p=*p1;
*p1=*p2;
*p2=*p;
free(p);
}
使用完p后,记得释放p指向的内存,某些情况下还需将p指向NULL,防止悬挂指针。
free(p);
p=NULL;
6.下题是否有误,如何改正
如下代码,遍历数据,删除符合条件的元素,是否能实现。
NSMutableArray *enumlator = [NSMutableArray arrayWithObjects:@"5",@"3",@"2",@"1",nil];
for (NSInteger i=0; i
答案:不能(本以为遍历一个可辨的数组是错误的,看来我想错了)
解决方案:倒叙遍历即可解决
解决方案一:倒叙遍历数组
NSMutableArray *enumlator = [NSMutableArray arrayWithObjects:@"5",@"3",@"2",@"1",nil];
for (int i = enumlator2.count -1;i >= 0;i--) {
NSString *object = [enumlator objectAtIndex:i];
if(一定条件){
[enumlator removeObject:object];
}
}
解决方案二:使用谓词,应该可以实现
NSArray *NeedArray = [enumlator2 filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
NSLog(@"evaluatedObject:%@",evaluatedObject);
NSLog(@"bindings:%@",bindings);
[enumlator2 removeObject:evaluatedObject];
return YES;
}]];
NSLog(@"whatYouNeedArray%@",enumlator2);