[不断更新]iOS开发常用技术

1.修改默认初始化方法 构建便利构造器

修改默认init初始化
.m文件中
@implementation 类名
-(id)init{
  self=[super init];
  printf("xxx");
  if(self){
  name=@"xxx";
  age=36;
  xx=xxx;
  }
  return self;
 }
}
@end
main中
@autoreleasepool{
xxx* xx=[[xx alloc]init(默认方式)];
}

根据名字(可使用多条件)初始化
.m文件中
-(id)initName:(NSString)n{
  self=[super init];
  if(self){
  name=@"xxx";
  age=36;
  xx=xxx;
  }
  return self;
 }
}
@end
main中
@autoreleasepool{
   xxx* xx=[[xx alloc]initName];
}

2.重写系统description方法 用于测试

#pragma mark 描述 NSLog(@"%@",对象名);
-(NSString*)description{
   return [NSString stringWithFormat:@"uid=%d",[self getUid]];
}

3. NSString相关操作

NSString不可变字符串/NSMutableString可变字符串
创建字符串
1.字面量 NSString* str=@"xxx"; 常用
2.new NSString* str=[NSString new]; 不推荐
3.实例化 NSString* str=[[NSString alloc]initWithString:@"xxx"]; 常用
4.便利构造器 NSString* str=[NSString stringWithFormat:@"格式",变量]; 重点
   文件 a01.jpg...a20.jpg
   for(i=1;i<=20;i++)
   NSString* str=[NSString stringWithFormat:@"a%02d",i];
5.通过字符数组初始化
   char c[]=@"xxx";
   NSString* str=[[NSString alloc]initWithCString:c encoding:UTF8String];

NSString常用消息
获取字符串长度
NSInteger length=[str length];

根据索引得到单个字符
unichar c=[str charactorAtIndex:5]; //索引从0开始

从某个位置截取字符串(获得子串)
NSRange range={1,2}; //1为索引位置 2为截取长度
NSString* str=[str subStringWithRange:range];
eg.
NSString* str=@"helloworld";
NSRange r={1,3};
NSString* result=[str subStringWithRange:r];
NSLog(@"%@",result);
-> ell

//取.jpg前的值
NSRange range;
NSString* demo=@"xxx.jpg";
range=[demo rangeOfString:@"."];
   if(range.length==0){
     printf("Nothing Match!\n");
   }
NSRange find={0,range.location};
NSString* result=[demo subStringWithRange:find];
NSLog(@"%@",result);

叠加字符串 appendString(NSMutableString适用)
NSMutableString* str=[[NSMutableString alloc]init];
[str appendString:@"123"];
[str appendString:@"456"];
NSLog(@"%@",str);
->123456

4.NSArray相关操作

NSArray数组遍历
1.循环法
for(int i=0 ; i<str.count ; i++)
{
     NSLog(@"%@",str[i]);
}
2.迭代器(OC中专门遍历数组的方法 效率更高)
NSEnumerator* it=[str objectEnumerator];
id object;
while(object=[it nextObject])
{
   NSLog(@"%@",object);
}

使用字面量输入数据
NSArray* [email protected][stu1,stu2,@"xxx"];

输出数组元素个数
NSLog(@"count=%ld",array.count);

输出数组所有元素
NSLog(@"%@",array);

取得数组第4个元素
NSLog(@"4th%@",[array objectAtIndex:3]);

NSMutableArray*
为可变数组根据所占空间实例化
NSMutableArray* muArray=[NSMutableArray arrayWithCapacity:6];

为可变数组添加数据
[muArray addObject:@"xxx"];

根据索引为可变数组插入/删除数据
[muArray insert/removeObject:@"xxx" atIndex:4];

遍历可变数组
for(NSObject* object  in muArray){
   NSLog(@"%@",object);
}

5.NSDictionary相关操作

创建NSDictionary
NSDictionary* dic=[NSDictionary dictionaryWithObjectsAndKeys:@"object1",@"key1",nil]; //字典必须以nil结尾

以文件内容初始化字典
NSDictionary* dic=[NSDictionary dictionaryWithContentsOfFile:path];

通过字面量创建字典
NSDictionary* [email protected]{@"k01":@"xxx",@"k02":@(10)}; //数字直接用@( )放入字典

输出字典内容
NSLog(@"%@",dic);

取得字典长度
[dic count];

通过键输出字典内容
NSLog(@"%@",[dic objectForKey:@‘k01"]);
NSLog(@"%@",dic[@"k01"]);

遍历字典(只取得value或key)
NSEnumerator* it=[dic object/keyEnumertor];
id object;
while(object=[it nextObject])
{
   NSLog(@"%@",object);
}

取得所有的键
NSArray* array=[dic allKeys];

NSMutableDictionary*
创建并初始化
NSMutableDictionary* dic=[NSMutableDictionary dictionaryWithCapacity:10];

向字典动态添加数据
[dic setObject:@"xxx" forKey:@"xxx"];

6.KVC键值编码

KVC Key-Value-Coding
间接访问实例变量的方法
Student* stu=[[Student alloc]init];
[stu setValue:@"xxx" forKey:@"name"];
NSString* name=[stu valueForKey:@"name"];
NSLog(@"学生姓名=%@",name);

7.NSDate相关操作

获取当前时间
NSDate* now=[NSDate date];
NSLog(@"%@",now);

取得两个时间对象间隔
NSDate* now=[NSDate date];
NSDate* tomorrow=[[NSDate alloc]initWithTimeIntervalSinceNow:24*60*60];
NSLog(@"%@",[now timeIntervalSinceDate:tomorrow]);

8.Protocol协议实现方法

protocol 协议
协议只能放方法的声明

创建协议
New->File->Objective-C->Protocol
Protocol.h文件
@protocol 协议名<NSObject(父协议)>
@required (必须实现)
@optional (可选)
@end

使用协议
.h文件中 #improt"ProtocolName.h" 父类名后加<ProtocolName>
.m文件中 实现协议功能

判断方法是否实现
测试协议时使用
if [对象 respondsToSelector:@Selector(方法名)]{
   [对象 方法名];
   };
OC中方法是SEL(@Selector)类

9.Delegate委托代理

delegate 委托代理
类自己不能完成的消息 让别的类去做
实际应用时 区分委托代理是谁 谁需要帮助 谁需要遵守协议

创建委托代理模式
1.创建协议 声明能帮助其它类的消息
2.需要帮助的类
->NeedHelp.h中
#import"ProtocolName.h"
父类名后不要加<ProtocolName>//只导入协议 不遵守协议
->声明delegate属性
@property(nonatomic,assign)id<ProtocolName>delegate
->NeedHelp.m中
->需要帮助的消息中写
if(self.delegate&&[self.delegate respondsToSelector:@selector(帮助该类的消息)])
{
   [self.delegate 帮助该类的消息];
};
else ...
3.委托代理的类
->Helper.h中
#import"ProtocolName.h"父类名后加<ProtocolName>
->Helperm中
实现协议中声明的功能
4.实例化对象
NeedHelp类的对象.delegate=委托代理类的对象;

10.NSTimer相关操作

NSTimer
{
   int count;
   NSTimer* TimeStop;
}
-(id)init
{
   self=[super init];
   count=0;
   [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(doHomework) userInfo:nil repeats:YES];
   if(count==100)
   [TimeStop invalidate];
   return self;
}
-(void)doHomeWork
{
   count++;
   printf("HomeWork %d\n",count);
}
int main()
{
   Student* stu=[[Student alloc]init];
   [stu doHomeWork];
   [[NSRunLoop currentRunLoop]run];
   //单独的NSTimer类对象使用[timer fire];方法启动计时器
}

11.NSNotificationCenter通知中心

NSNotificationCenter 通知中心
实现了观察者模式 允许应用的不同对象以松耦合的方式进行通信

创建通知中心
1.通知中心是系统中的单例
不用单独创建 直接使用即可
2.设定观察者observer
在观察者observer.m中 需要设定观察的消息中写入
-(void)observer
{
   NSNotificationCenter* nc=[NSNotificationCenter defaultCenter];
   //SEL为观察者需要执行的代码 Name为通知中心根据这个名字进行通知观察者
   [nc addObserver: self selector:@selector(SEL) name:@"Name" object:nil];
}
3.设定发送者poster
在发送者poster.m中 需要设定发送的消息中写入
-(void)poster
{
   NSNotificationCenter* nc=[NSNotificationCenter defaultCenter];
   //Name为poster发送到通知中心的标记 object为发送消息的对象
   [nc postNotificationName:@"Name" object:self];
}
4.main中直接实例化观察者和发送者
先创建[观察者对象 observe];进行观察 再创建被观察者执行消息

12.单例模式

单例
类中的对象有且只有一个

单例方法命名
多以shared类名 或 default类名开头

.h文件
+(id)sharedClassName;

.m文件
#import "ClassName.h"
@implementation
ClassName
Static ClassName* shared=nil;
+(id)sharedClassName{
   static dispatch_once_t xx;
   dispatch_once(&xx,^{
       if(shared==nil){
       shared=[[super allocWithZone:Null]init];
       }
   });
   return shared;
}
-(id)copyWithZone:(NSZone*)zone
{
   return self;
}
+(instancetype)allocWithZone:(NSZone*)zone
{
   return [self sharedClassName];
}
@end

13.FMDB数据库操作

FMDB常用类
FMDatabase : 一个单一的SQLite数据库 用于执行SQL语句
FMResultSet :执行查询一个FMDatabase结果集 这个和android的Cursor类似
FMDatabaseQueue :在多个线程来执行查询和更新时会使用这个类

建立FMDB
1.把FMDB文件夹复制到项目根目录
2.把FMDB文件拖入项目
3.project-> BuildPhases-> LinkBinaryWithLibraries-> +Libsqlite3.dylib

使用FMDB
1.导入头文件
#import"FMDatabase.h"
2.建立数据库
NSString* path=@"xx/xx/xx.db"; //xx/xx/xx为建立数据库路径 可以把路径定义成宏 方便更改
FMDatabase* db=[FMdatabase databaseWithPath:path]; //参数为上面定义的path
* 当数据库文件不存在时 fmdb会自己创建一个
* 如果传入的参数是空串:@"" 则fmdb会在临时文件目录下创建这个数据库 数据库断开连接时 数据库文件被删除
* 如果传入的参数是 NULL 则它会建立一个在内存中的数据库 数据库断开连接时 数据库文件被删除
if(![db open]){
   printf("Error!\n"); //如果没有打开数据库则显示Error
}
else{
   printf("Success!\n");
}
[db close]; //建立后关闭数据库
3.建表
NSString* sql=@"create table if not exists tablename(列名1,列名2);";
4.数据库增删改等操作
除了查询操作 FMDB数据库操作都执行executeUpdate方法 这个方法返回BOOL型
NSString* sql...
5.数据查询操作
查询操作使用了executeQuery 并涉及到FMResultSet
if ([db open]) {
        NSString * sql = [NSString stringWithFormat:
                          @"SELECT * FROM %@",TABLENAME];
        FMResultSet * rs = [db executeQuery:sql];
        while ([rs next]) {
            int Id = [rs intForColumn:ID];
            NSString * name = [rs stringForColumn:NAME];
            NSString * age = [rs stringForColumn:AGE];
            NSString * address = [rs stringForColumn:ADDRESS];
            NSLog(@"id = %d, name = %@, age = %@  address = %@", Id, name, age, address);
        }
        [db close];
}
时间: 2024-10-29 19:11:32

[不断更新]iOS开发常用技术的相关文章

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角)

iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 2015-04-05 15:25 2482人阅读 评论(1) 收藏 举报开源框架 图像: 1.图片浏览控件MWPhotoBrowser       实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作.      下载:https://github.com/mwaterfall/MWPhotoBrowser目前比较活跃的社区仍旧是Github,

IOS开发常用设计模式

IOS开发常用设计模式 说起设计模式,感觉自己把握不了笔头,所以单拿出iOS开发中的几种常用设计模式谈一下. 单例模式(Singleton) 概念:整个应用或系统只能有该类的一个实例 在iOS开发我们经常碰到只需要某类一个实例的情况,最常见的莫过于对硬件参数的访问类,比如UIAccelerometer.这个类可以帮助我们获得硬件在各个方向轴上的加速度,但是我们仅仅需要它的一个实例就够了,再多,只会浪费内存. 所以苹果提供了一个UIAccelerometer的实例化方法+sharedAcceler

iOS开发-常用第三方开源框架介绍

iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片进行缩放等操作. 下载:https://github.com/mwaterfall/MWPhotoBrowser 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下G

iOS 开发常用的一些工具

http://www.itjhwd.com/ios-tool/ 通用工具 HomeBrew:OS X上非常出色的包管理工具. 源码控制 Git:分布式版本控制系统和源码管理系统,其优点是:快和简单易用.对于新手来说,可在此查看免费电子书籍. GitHub:声望日盛的资源分享之地. BitBucket:GitHub的替代选择. GitHub for Mac:一个设计的非常美观的git客户端,不能取代你从命令行获得的所有功能,但使用起来非常简单. SourceTree:Windows和Mac上免费

iOS 开发常用的调试命令

XCode4.0以后,编译器是LLVM,控制台调试命令前缀是lldb 第一.LLVM简介 LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time).链接时间(link-time).运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本. 第二. 对关注编译技术的开发人员,LLVM提供了很多优点: 现代化的设计 LLVM的设计是高度模块化的,使得其代码更为清晰和便于排查问题

【iOS开发-116】内存测试管理和优化:Analyze和Profile,以及iOS开发常用工具simPholders、fabric

(1)关于Analyze和Profile的使用和介绍 --使用,长按左上角的Run,会出现Analyze和Profile两个选项.Analyze是静态内存分析,如果有潜在的内容泄露问题会出现蓝色的标记.Profile是动态内存分析,这个比较详细一点,可以看到程序的每个模块占用多少内存等等. 推荐的博客: IPhone开发工具篇-利用xcode profile和analyze进行性能优化 备注:自从有了ARC,内存泄露问题大大减少了,但不代表没有.对内存有疑问或者对于老项目从非ARC转ARC有困难

几款iOS开发常用工具

本文主要讲述几款iOS开发常用工具,更多IOS技术知识,请登陆疯狂软件教育官网. ImageOptim – 另一个Mac应用,可以压缩PNG图片来节省空间.大多数PNG文件可以省掉几个百分点的大 小,有时甚至30%或更多.图片更小意味着应用尺寸更小,运行时加载它们所使用的内存也更小. Prepo – 一个Mac上的小应用,可以将图片快速变换为你需要的多个尺寸.只需要拖动一个大图标文件(比如,1024*1024)到Prepo,它就会生成512*512的iTunesArtwork,114*114的

iOS开发常用的网站(转老师的)

iOS开发常用的网站 iOS开发常用的网站 1.cocoachina http://www.cocoachina.com 2. github http://www.github.com 3.code4app http://www.code4app.com 4.UI4app http://www.ui4app.com 5.www.oschina.com http://www.oschina.net/ 6.pudn 程序员联合开发网 http://www.pudn.com 7.csdn 中国软件开发

iOS开发常用的宏

有些时候,我们需要将代码简洁化,这样便于读代码.我们可以将一些不变的东东抽取出来,将变化的东西作为参数.定义为宏,这样在写的时候就简单多了. 下面例举了一些常用的宏定义和大家分享: 1. 判断设备的操作系统是不是ios7 #define IOS7 ( [[[UIDevice currentDevice].systemVersion doubleValue] >= 7.0] ) 2. 判断当前设备是不是iPhone5 #define kScreenIphone5 (([[UIScreen main