Objective-C sortUsingSelector方法

今天我们学习两个方法, 一个是对字符串进行排序的方法,一个是对常量数进行排序的方法.

创建一个Person类,并且在Person.h文件中,设置实例 初始化 以及setter getter方法  另外把排序的方法声明在Person.h文件中.

#import <Foundation/Foundation.h>

@interface Person : NSObject

//1.设置三个实例 name sex age

{

NSString *_name;

NSString *_sex;

NSInteger _age;

}

//2.指定初始化

- (id)initWithName:(NSString *)name

sex:(NSString *)sex

age:(NSInteger)age;

//3.setter getter方法

- (void)setName:(NSString *)name;

- (NSString *)name;

- (void)setSex:(NSString *)sex;

- (NSString *)sex;

- (void)setAge:(NSInteger)age;

- (NSInteger)age;

//4.声明一个按姓名排序的方法

- (NSComparisonResult)compareByNameWithOtherPerson:(Person *)anotherPerson;

//5.声明一个按年龄排序的方法

- (NSComparisonResult)compareByAgeWithOtherPerson:(Person*)anotherPerson;

//6.声明一个description

- (NSString *)description;

@end

//调转到Person.m中进行方法的实现

在Person.h文件中声明之后,将2.3.4.5.6复制下来,到Person.m文件进行实现.

#import "Person.h"

@implementation Person

//2.指定初始化

- (id)initWithName:(NSString *)name

sex:(NSString *)sex

age:(NSInteger)age

{

self = [super init];

if (self) {

_name = name;

_sex = sex;

_age = age;

}

return self;

}

//3.setter getter方法

- (void)setName:(NSString *)name

{

_name = name;

}

- (NSString *)name

{

return _name;

}

- (void)setSex:(NSString *)sex

{

_sex = sex;

}

- (NSString *)sex

{

return _sex;

}

- (void)setAge:(NSInteger)age

{

_age = age;

}

- (NSInteger)age

{

return _age;

}

//4.声明一个按姓名排序的方法

- (NSComparisonResult)compareByNameWithOtherPerson:(Person *)anotherPerson

{

if ([self.name compare:anotherPerson.name] > 0) {

return NSOrderedDescending;

}else if ([self.name compare:anotherPerson.name] < 0)

{

return NSOrderedAscending;

}

return NSOrderedSame;

}

//5.声明一个按年龄排序的方法

- (NSComparisonResult)compareByAgeWithOtherPerson:(Person*)anotherPerson

{

if (self.age > anotherPerson.age) {

return NSOrderedDescending;

}else if (self.age < anotherPerson.age)

{

return NSOrderedAscending;

}

return NSOrderedSame;

}

//6.声明一个description

- (NSString *)description

{

return [NSString stringWithFormat:@"name:%@ , sex: %@, age:%ld",_name,_sex,_age];

}

@end

方法声明及实现之后,我们就要跳转到main函数中进行调用方法

#import <Foundation/Foundation.h>

#import "Person.h"

int main(int argc, const char * argv[])

{

@autoreleasepool {

//7.创建4个对象

Person *obj1 = [[Person alloc] initWithName:@"Jack" sex:@"male" age:22];

Person *obj2 = [[Person alloc] initWithName:@"Henry" sex:@"male" age:28];

Person *obj3 = [[Person alloc] initWithName:@"Elyse" sex:@"female" age:26];

Person *obj4 = [[Person alloc] initWithName:@"Lisa" sex:@"female" age:24];

NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:obj1,obj2,obj3,obj4, nil];

//8. 数组按照名字排序

[array sortUsingSelector:@selector(compareByNameWithOtherPerson:)];

//调用compareByName这个方法,在运行的时候,会首先跳转到Person.h中,看看有没有这个方法,找到后,就会跳转到Person.m中,运行方法,然后在跳转到main函数中,把结果显示出来.

NSLog(@"%@",array);

//9. 数组按照年龄排序

[array sortUsingSelector:@selector(compareByAgeWithOtherPerson:)];

//调用compareByAge这个方法,在运行的时候,会首先跳转到Person.h中,看看有没有这个方法,找到后,就会跳转到Person.m中,运行方法,然后在跳转到main函数中,把结果显示出来.

NSLog(@"%@",array);

}

return 0;

}

这次主要是把字符串排序和常量数的排序掌握, 以后应该还会经常用到,所以把方法记住!

时间: 2024-10-27 12:07:54

Objective-C sortUsingSelector方法的相关文章

iOS中数组的排序方法

1函数介绍与实例 函数一:- (void)sortUsingSelector:(SEL)comparator; 适用于数组中的元素自带比较函数时: 数组排序函数,调用该函数的对象为数组,comparator是调用该函数的数组中的元素的方法.函数参数类型为数组中的元素类型或者id类型,在调用时不需要传递参数,排序过程不可见,该函数执行时:循环取出各个元素,进行比较,然后放到合适的位置 使用实例: 将数组中的元素按照字符串大小排序: NSMutableArray*array = [[NSMutabl

iOS开发总结(A0)- Class, variable, enum, method 命名规范及好的做法

参考effective objective 2.0 item 19 use clear and consistent naming 中的建议 1. method name : 适用驼峰命名法,方法名称应尽能表明方法是干什么的,不必担心名称过程,因为在使用时,xcode 会自动补全 - 如果method返回一个值,方法名称应表明这是什么值 - 不要用缩写 - 对于boolean property ,加上is 或者has 前缀 - 不要使用get 前缀 - 名称应易读,尽量像一个自然句子 2. cl

Hybrid App开发模式中, IOS/Android 和 JavaScript相互调用方式

IOS:Objective-C 和 JavaScript 的相互调用 iOS7以前,iOS SDK 并没有原生提供 js 调用 native 代码的 API.但是 UIWebView 的一个 delegate 方法使我们可以做到让 js 需要调用时,通知 native.在 native 执行完相应调用后,可以用stringByEvaluatingJavaScriptFromString 方法,将执行结果返回给 js.这样,就实现了 js 与 native 代码的相互调用.具体让 js 通知 na

Objective-C学习_内存管理学习笔记

  内存泄漏 : 应当废弃的对象在超出生命周期后继续存在 内存管理 : 遵守配对原则,有alloc/new/copy/mutableCopy就要有相对应的release或autorelease 原因 : Oc对象是在堆里面的(动态分配),堆里面的内存由我们程序员来管理 : 对象操作 Objective –c 对应方法 生成并持有对象 alloc/new/copy/mutableCopy等 持有对象 retain 方法 释放对象 release方法 废弃对象 dealloc方法(系统自动调) 内存

Foundation 框架 NSArray、NSMutableArray排序

一.使用selector对数组进行排序(无返回) 数组 book 中包含 AddressCard对象. 1.对数组调用 sortUsingSelector方法 1 -(void) sortByName 2 { 3 SEL s = @selector(compareName:); 4 [book sortUsingSelector: s]; 5 } 2.在AddressCard类中添加比较方法:compareName 1 -(NSComparisonResult) compareName: (Ad

iOS开发设计策略模式

iOS应用能加密?全球都没有的技术,你造吗?作为开发iOS应用的,是不是感到自己out啦?快来看看什么是iOS应用加密:http://www.ijiami.cn/newsInfo?id=541&v=2 在iOS开发中,使用官方框架,官方sdk中,可以接触到不少设计模式,可能平时没有注意,实际上已经用到了不少设计模式 下面举一个例子: 策略模式:至于什么是策略模式,请自己百度吧,我也说不清楚,但是知道怎么用,下面结合代码详细说明 比方我有一个NSMutableArray,里面每个元素都是一个NSD

sortUsingSelector使用方法,以及原理

在IOS软件开发中我们需要依据NSArray中对象的成员进行排序,我们知道对象中成员比较多,因此如果我们写了多种方法根据不同的成员进行排序,代码量很大,实现起来不是很方便,因此苹果向我们提供了一种快速排序的方法,叫做 - (void)sortUsingSelector:(SEL)comparator; 本文重视讲诉原理: 我们先来看一个例子: #import <Foundation/Foundation.h> //Dog头文件 @interface Dog : NSObject {     N

objective C 内存管理及属性方法详解

oc为每个对象提供一个内部计数器,这个计数器跟踪对象的引用计数,当对象被创建或拷贝时,引用计数为1,每次保持对象时,调用retain接口,引用计数加1,如果不需要这个对象时调用release,引用计数减1,当对像的引用计数为0时,系统就会释放掉这块内存,释放对象调用dealloc 当对象包含其他对象时,就得在dealloc中自己释放他们 NSObject是IOS所有类的基类 有两个基本函数,alloc和dealloc alloc类似于C++的new,dealloc类似于delete 当对象的re

iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法

本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列.然后在開始Objective C语言的学习,假设您遇到问题也能够与我探讨,另外将无偿分享自己整理的大概400G iOS学习视频及学习资料.都是干货哦.能够新浪微博私信?关注极客James.期待与您的共同学习和探讨.! 由于时间有限,每天在工作之余整理的学习分享.难免有不足之