oc之数组排序 id nsobject instancetype的区别

oc排序与c语言排序不同,不需要写实现的方法,只需要调用已经写好的方法

// 数组内元素排序--(选择器)正序输出
        NSArray *array1=[NSArray arrayWithObjects:@"zcc",@"qwe",@"ada",@"cbv",nil];
        NSArray *sortArray2=[array1 sortedArrayUsingSelector:@selector(compare:)];
        for(id str in sortArray2){
            NSLog(@"%@",str);
        }
       
// 数组内元素排序--(选择器)倒序输出
        NSArray *array1=[NSArray arrayWithObjects:@"zcc",@"qwe",@"ada",@"cbv",nil];
        NSArray *sortArray3=[array1 sortedArrayUsingSelector:@selector(class)];//倒序输出
        for(id str3 in sortArray3){
            NSLog(@"%@",str3);
        }
1 //数组排序-- block (默认是升序,降序就是将obj1和obj2调换位置)
2         NSComparator sort=^(id obj1,id obj2){  //使用id可以传任意对象
3             return [obj1 compare:obj2];       //obj1  obj2进行比较  返回枚举类型值
4         };
5         NSArray *sortArray1=[array1 sortedArrayUsingComparator:sort]; //调用sort函数,sort函数必须自己写
6         for(id str1 in sortArray1){
7             NSLog(@"%@",str1);
8         }

id nsobject instancetype的区别

         

         Dog *jingba=[[Dog alloc]init];

         也可以写成

          NSObject *jingba=[[Dog alloc]init];

         父类可以指向子类对象,但是使用方法时必须强转成子类方法

          [(Dog *)haShiQi bark];

         

         id nsobject 都是指向任意的对象类型

         id 当不确定数组类型时,可以选择用id

         nsobject 使用时必须强转,id  不用

         

         instancetype 可以反回和方法所在类相同类型的对象(返回值类型多,但是不能传参)

         id 只能返回未知类型的对象   (大多参数使用)

原文地址:https://www.cnblogs.com/jiangyicheng/p/5110024.html