iOS开发之Objective-C书签管理器项目

Posted llguanli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发之Objective-C书签管理器项目相关的知识,希望对你有一定的参考价值。

1.项目

新建一个书签管理器的项目,能够存储书签的网址、中文名、星级、訪问量和权限信息。具有增、删、改、查和排序的功能。

2.找对象,抽象类

书签管理器,书签管理器。书签管理器……  多读几次书是不是就找到了对象。书签和管理器。书签包括网址、中文名和星级等信息。管理器里面有书签。那么我就能够抽象出两个类了。一个是书签类。一个是管理器类。

我们在书签管理器里面增、删、改、查和排序书签。在书签里面保存书签具有的属性数据。

3.对象的属性和行为分析

技术分享
书签管理器的存储关系的分析:
技术分享

4.类的实现

1.书签类的实现

#import <Foundation/Foundation.h>
//书签类  存储书签详细的信息/数据
@interface BookMark : NSObject{
	NSString * _url;   //网址
	NSString * _title; //标题
	NSUInteger _stars; //星级
	NSUInteger _vist;  //訪问人数
	char _level;       //权限
}
- (void) setUrl:(NSString *)url;
- (void) setTitle:(NSString *)title;
- (void) setStars:(NSUInteger)stars;
- (void) setVist:(NSUInteger)vist;
- (void) setLevel:(char)level;

- (NSString *) getUrl;
- (NSString *) getTitle;
- (NSUInteger) getStars;
- (NSUInteger) getVist;
- (char) getLevel;

//构造方法 存储数据
- (instancetype)initWithUrl:(NSString *)url
				  withTitle:(NSString *)title
				  withSarts:(NSUInteger)stars
				   withVist:(NSUInteger)vist
				  withLevel:(char)level;

@end

#import "BookMark.h"
@implementation BookMark
- (instancetype) initWithUrl:(NSString *)url withTitle:(NSString *)title withSarts:(NSUInteger)stars withVist:(NSUInteger)vist withLevel:(char)level{
	self = [super init];
	if (self) {
		_url = url;
		_title = title;
		_stars = stars;
		_vist = vist;
		_level = level;
	}
	return self;
}
- (void) setUrl:(NSString *)url{
	_url = url;
}
- (void) setTitle:(NSString *)title{
	_title = title;
}
- (void) setStars:(NSUInteger)stars{
	_stars = stars;
}
- (void) setVist:(NSUInteger)vist{
	_vist = vist;
}
- (void) setLevel:(char)level{
	_level = level;
}
- (NSString *) getUrl{
	return _url;
}
- (NSString *) getTitle{
	return _title;
}
- (NSUInteger) getStars{
	return _stars;
}
- (NSUInteger) getVist{
	return _vist;
}
- (char) getLevel{
	return _level;
}
@end

2.管理器类的实现

#import <Foundation/Foundation.h>
#import "BookMark.h"
//书签管理器类
@interface BookManager : NSObject{
	NSMutableArray * _array;
}
- (instancetype)init;
//删除
- (void) removeBookMark:(NSString *)title;
//添加
- (void) addBookMarkWithUrl:(NSString *)url
			      withTitle:(NSString *)title
			      withStars:(NSUInteger)stars
				   withVist:(NSUInteger)vist
			      withLevel:(char)level;
//改动
- (void) modifyTitle:(NSString *)title withNewTitle:(NSString *)newTitle;
//查找
- (void) searchWithTitle:(NSString *)title;
- (void) sortWithStars;
- (void) showAllBookMark;
@end
#import "BookManager.h"

@implementation BookManager

- (instancetype)init{
	self = [super init];
	if (self) {
		_array = [[NSMutableArray alloc] init];
	}
	return self;
}
//添加书签
- (void) addBookMarkWithUrl:(NSString *)url
				  withTitle:(NSString *)title
				  withStars:(NSUInteger)stars
				   withVist:(NSUInteger)vist
				  withLevel:(char)level{
	for (int i = 0; i < [_array count]; i ++) {
		if ([title isEqualToString:[_array[i] getTitle]]) {
			NSLog(@"反复加入");
			return;
		}
	}
//以下既能够使用构造方法也能够使用set方法
	BookMark *book = [[BookMark alloc] initWithUrl:url withTitle:title withSarts:stars withVist:vist withLevel:level];
//	BookMark * book = [[BookMark alloc] init];
//	[book setUrl:url];
//	[book setTitle:title];
//	[book setStars:stars];
//	[book setVist:vist];
//	[book setLevel:level];
	[_array addObject:book];
}
//删除书签
- (void) removeBookMark:(NSString *)title{
	for (int i = 0; i < [_array count]; i ++) {
		if ([title isEqualToString:[_array[i] getTitle]]) {
			[_array removeObject:_array[i]];
			return;
		}
		else NSLog(@"没有这个书签");
	}
}
//改动书签
- (void) modifyTitle:(NSString *)title withNewTitle:(NSString *)newTitle{
	for (int i = 0; i < [_array count]; i ++) {
		if ([title isEqualToString:[_array[i] getTitle]]) {
			[_array[i] setTitle:newTitle];
		}
	}
}
//查找书签
- (void) searchWithTitle:(NSString *)title{
	int index = -1;  //保存书签位置
	//index = -1 表示没有找到相应的书签
	//遍历书签。找到后就保存目标书签位置后退出循环
	for (int i = 0; i < [_array count]; i ++) {
		if([title isEqualToString:[_array[i] getTitle]])
		{
			index = i;
			break;
		}
	}
	if (index == -1) {
		NSLog(@"没有找到须要查找的书签");
	}
	else NSLog(@"找了该书签 pos = %d",index);
}
- (void) sortWithStars{
	//使用冒泡排序对书签对象进行排序
	for (int i = 0; i < [_array count] - 1; i ++) {  //控制排序的轮数
		for (int j = 0; j < [_array count] - 1 - i;  j ++) { //控制比較的次数
			if ([_array[j] getStars] > [_array[j + 1] getStars]) {
				NSArray * temp;
				temp = _array[j];
				_array[j] = _array[j + 1];
				_array[j + 1] = temp;
			}
		}
	}
}
- (void) showAllBookMark{
	for (int i = 0; i < [_array count]; i ++) {
		NSLog(@"网址:%@ 标题:%@ 星级:%ld 訪问量:%ld 权限:%c",
			  [_array[i] getUrl],
			  [_array[i] getTitle],
			  [_array[i] getStars],
			  [_array[i] getVist],
			  [_array[i] getLevel]);
	}
}
@end

5.书签管理器的操作

这一步我们想象成是人在操作一个带界面的书签管理器,因为没有界面,我们就仅仅能在main函数里面操作了。比如:

#import <Foundation/Foundation.h>
#import "BookMark.h"
#import "BookManager.h"
int main(int argc, const char * argv[]) {
	@autoreleasepool {
		//新建一个百度的书签
		BookManager	* myBookManager = [[BookManager alloc] init];
		[myBookManager addBookMarkWithUrl:@"www.baidu.com" withTitle:@"百度" withStars:3 withVist:123 withLevel:‘A‘];
		//新建一个新浪的书签
		[myBookManager addBookMarkWithUrl:@"www.sina.com" withTitle:@"新浪" withStars:7 withVist:456 withLevel:‘B‘];
		//新建一个搜狐的书签
		[myBookManager addBookMarkWithUrl:@"www.souhu.com" withTitle:@"搜狐" withStars:5 withVist:756 withLevel:‘C‘];
		//反复加入
		[myBookManager addBookMarkWithUrl:@"www.souhu.com" withTitle:@"搜狐" withStars:5 withVist:756 withLevel:‘C‘];
		//显示所有书签
		NSLog(@"所有加入的书签");
		[myBookManager showAllBookMark];
		//查找
		[myBookManager searchWithTitle:@"新浪"];
		//删除
		[myBookManager removeBookMark:@"百度"];
		NSLog(@"删除后的书签");
		[myBookManager showAllBookMark];
		//排序
		[myBookManager sortWithStars];
		NSLog(@"排序后的书签");
		[myBookManager showAllBookMark];
		//改动
		[myBookManager modifyTitle:@"新浪" withNewTitle:@"123"];
		NSLog(@"改动后的书签");
		[myBookManager showAllBookMark];
	}
    return 0;
}

首先我们天剑三个书签:百度、新浪和搜狐。

书签的内容就是程序中的内容。

然后我们验证添加书签、查找书签、删除书签、书签排序和改动书签的行为方法是否正确。

最后程序的输出是:

2015-07-22 20:15:58.560 3.书签管理器[3083:303] 反复加入
2015-07-22 20:15:58.562 3.书签管理器[3083:303] 所有加入的书签
2015-07-22 20:15:58.563 3.书签管理器[3083:303] 网址:www.baidu.com 标题:百度 星级:3 訪问量:123 权限:A
2015-07-22 20:15:58.565 3.书签管理器[3083:303] 网址:www.sina.com 标题:新浪 星级:7 訪问量:456 权限:B
2015-07-22 20:15:58.565 3.书签管理器[3083:303] 网址:www.souhu.com 标题:搜狐 星级:5 訪问量:756 权限:C
2015-07-22 20:15:58.566 3.书签管理器[3083:303] 找了该书签 pos = 1
2015-07-22 20:15:58.568 3.书签管理器[3083:303] 删除后的书签
2015-07-22 20:15:58.568 3.书签管理器[3083:303] 网址:www.sina.com 标题:新浪 星级:7 訪问量:456 权限:B
2015-07-22 20:15:58.569 3.书签管理器[3083:303] 网址:www.souhu.com 标题:搜狐 星级:5 訪问量:756 权限:C
2015-07-22 20:15:58.570 3.书签管理器[3083:303] 排序后的书签
2015-07-22 20:15:58.571 3.书签管理器[3083:303] 网址:www.souhu.com 标题:搜狐 星级:5 訪问量:756 权限:C
2015-07-22 20:15:58.573 3.书签管理器[3083:303] 网址:www.sina.com 标题:新浪 星级:7 訪问量:456 权限:B
2015-07-22 20:15:58.574 3.书签管理器[3083:303] 改动后的书签
2015-07-22 20:15:58.576 3.书签管理器[3083:303] 网址:www.souhu.com 标题:搜狐 星级:5 訪问量:756 权限:C
2015-07-22 20:15:58.577 3.书签管理器[3083:303] 网址:www.sina.com 标题:123 星级:7 訪问量:456 权限:B
Program ended with exit code: 0
和我们预期的是一样的,说明我们的书签管理器的项目功能是实现了。

6.总结

在这个书签管理器中我们有下面几点须要学习的:

1.分析项目需求;

2.找对象,抽象出类。分析类的属性和行为;

3.实现类;

4.验证相关行为或方法是否正确。

书签管理器里面存储的是书签,书签里面存储的是数据。这里我在书签管理器里面设置一个可变数组的行为来存储书签的地址。每次添加一个书签的时候我们就创建一个书签的对象。并把书签的数据写进去。

删除书签的时候就删除该书签在数组中的位置就能够了。




以上是关于iOS开发之Objective-C书签管理器项目的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发系列—Objective-C之内存管理

云原生之使用Docker部署OneNav个人书签管理器

云原生之Docker实战使用Docker部署OneNav个人书签管理器

云原生之Docker实战使用Docker部署Shiori个人书签管理器

云原生之Docker实战使用Docker部署Shiori个人书签管理器

Objective-C04-第一个OC程序解析