一小时学会object-c

■ XCODE设置:

(1)把编译器中的“警告”,设置成错误级别。方法:build settings 搜索error->“treat warings as errors”,更改为true.

(2)xcode 快捷键:

ESC: 打开代码提示自动完成窗口

TABLE:补全自动提示

快照:command+ctrl+s

保存:command+s

撤销:command+z

运行:command+r

注释 command+/(支持块)

断点:command+\

缩进:command+[ 或 command+]

分析代码:command+shift+b(找到内存溢出问题)

跳转声明: command  + 单击

清除控制台: control + k

添加书签 command+d

折叠 command+control+左箭头

屏开 command+control+右箭头

屏开所有 control+u

折叠方法 command+control+上箭头

展开方法 command+control+下箭头

折叠注释块 command+control+shift+上箭头

展开注释块 command+control+shift+下箭头

关闭:command+w

行首:command+左箭头

行尾:command+右箭头

搜索:command+f(当前打开文档)

替换:command+option+f(当前打开文档)

删除本行:ctrl+k

全部保存:command+alt+s

项目全局搜索与替换:command+shift+f(左侧工具栏放大镜,上下箭头可以更改搜索/替换状态)

■ 安装到IPHONE

(1)infor面板:Bunddler Identifier -> com.lipeng

(2)Building Settings面板:ALL->Code singing identify->com.lipeng

■ IPHONE开发:

文本框和lable标签,是IBOutLet,需要从XIB窗口的AppObject拖到InterfaceBulid的Window窗口

按钮,是IBAction,需要从InterfaceBulid的Window窗口拖到XIB窗口的AppObject

■ Foundation Kit教程(常用数据类型备忘)

(1)结构体: NSRange、NSPoint、NSSize

(2)字符串相关函数:

初始化:NSString *str1; str1=[NSString stringWithFormat:@"hello %d",5];

比较是否相等:isEqualToString

比较大小:str1 compare: str2 (结果为-1,0,1) 有可选项 options:(是否区分大小写和只比较字符串所含字符个数)

字符串包含:

开头:hasPrefix,结尾:hasSuffix,(这两种方式返回BOOL)

中间:rangeOfString,(此方式返回NSRange,range.start即为匹配索引指,没找到则start=NSNotFound)

另,NSString-》对应JAVA中的String,NSMutableString-》对应JAVA中的StringBuffer

(3)数组:

两个注意事项:1,只能放NSObject对象,而不能放基本数据类型(参考下文——封装基本数据类型)。2,可变数组是NSMutableArray(参考NSMutableString)

字符串分隔成数组: componentsSeparatedByString

数组合并成字符串: componentsJoinedByString

可变数组的初始化:

NSMutableArray *array;

array=[NSMutableArray arrayWithCapacity:10];

可变数组的增、删、查

增:[array addObject: whbobjectname]

删:[array removeObjectAtIndex:1]

查:[array objectAtIndex:i]

遍历数组示例(优先推荐快速遍历):

方法一:快速遍历示例(仅适用于Object-C2.0,Mac OSX 10.5以上版本,相当于其他语言中的foreach):

for(NSString *string in array) //in whbenum也可以

{

NSLog(@"I AM %@",string);

}

方法二:普通循环遍历

NSArray * array;

array=[NSArray arrayWithObjects:@"one",@"two",nil];// nil 代表数组的结尾(联想一下C语言)

int i;

int arrayCount=[array count];

for(i=0;i<arrayCount;i++)

{

NSLog(@"itme %d ",i,[array objectAtIndex:i]);

}

方法三:迭代子

NSEnumerator *whbenum;

whbenum=[array objectEnumerator];

id item;

while(item=[whbenum nextObject])

{

NSLog(@"item:%@",item);

}

(4)字典:

初始化:

NSMutableDictionary *tires;

tires =[NSMutableDictionary dictionary];//注意:不是new

增加字典元素:(key相同即为修改)

[tires setObject:whbojbectname forKey:@"whbkeyname"];

删除字典元素:

[tires removeOjbectForKey:@"whbkeyname"];

查找字典元素:(获取)

Tire *tire=[tires objectForKey:@"whbkeyname"]

(5)封装基本数据类型(NSArray和NSDictionary不支持基本数据类型,必须先封装):

NSNumber *number;

装箱:

number=[NSNumber numberWithInt:42];

拆箱:

[number intValue];

(6)NSValue(指针,是NSNumber的父类,使用方法类似于C语言中的&parm,取变量的内存地址,个人感觉不是很常用)

(7)NSNull用法:[NSNull null]

(8)文件操作

获取文件扩展名:[filename pathExtension]

二进制文件转换成文本文件:plutil -convert xml1 filename.plist

【字符串形式操作文件】:

NSString *filecontent;

写入:

[filecontent writeToFile:@"tmp/whb.txt" atomically:YES]

读取:

filecontent=[[NSString alloc] initWithContentsOfFile: @"tmp/whb.txt"];

【数组形式操作文件】:

NSArray *arraycontent;

arraycontent =[NSArray arrayWithObjects:@"1",@"2",nil];

写入:

[arraycontent writeToFile:@"tmp/whb.txt" atomically:YES]

读取:

arraycontent =[NSArray arrayWithContentsOfFile: @"tmp/whb.txt"];

(9)日期和时间

NSDate *date=[NSDate date];

NSLog(@"today is %@",date);

■ OOP 编程

方法:+(void) methordname  +号表示是类的静态方法。

方法:-(id) init  id型数据是指泛型对象指针。

if(self=[super init]) 完成了超类初始化和校正内存地址为当前新生成对象2个功能(因为super init不一定返回self呦)。

生成类的实例:[[ClassName alloc] init] 等价于 [ClassName new]

类属性的命名(不推荐):setPropety,Property(而不是getProperty,NS历史遗留问题,getMethord的形参,全部是指针类型)

类属性推荐方法如下:

.h属性定义:@property float whbProperty;

.m属性实现:@synthesize whbProperty;实现后,默认有一个setWhbProperty方法来设置属性值。

重写父类方法:[super funcname:parm]

一段完整代码实例:

@implementation Circle

-(void) setFillColor:(ShapeColor)c

{

if(c==redcolor)

{

c=greencolor

‘ }

[super setFillColor:c]

}

类实例方法内部调用:[self whbmethord] (这里的self,相当于其他语言的this)

其他注意事项

import头文件时,<>与“”的区别:前者表示是系统头文件,禁止修改,后者是你自己的项目头文件,可以修改。

@class ClassName;  是放在interface.h中的,只是为了在interface中引用这个ClassName类。@class主要实现循环引用包含关系。

import ClassName.h; 是放在implement.m中的。

■ KVC间接访问对象属性方式,意即:键值编码:setValue:forKey 和 valueForKey:

代码示例:

[car setValue:[NSNumber numberWithFloat:250.4] forKey:@"whbProperty"]

编译器将首先查找-setWhbPorperty的方法,如果不存在,则查找类实例变量是否有whbProperty。

注意:

(1)键路径编码的setValue:ForKeyPath:和valueForKeyPath:支持"."点语法路径访问。

(2)键路径编码支持一对多关系中的数学运算。(不推荐,效率有待商榷,编译器不能排错)

比如来汇总车库中所有汽车的行驶里数:

NSNumber *summiles;

summiles=[garage valueForKeyPath:@"[email protected]"];

其中与sum类似的函数还有:count,avg,max,min

■ 类别和协议

类别(category):

主要实现往一个现有类中增加新方法(只能增加方法,不能增加变量,增加方法时,会覆盖旧有同名方法)

定义实例代码:

@interface WhbClass(categoryName)

-(void) newMethordName;

@end

解释:往WhbClass类中增加一个newMethordName新方法,此类别的名称为categoryName

类别主要功能:分散单个大类文件,比如分离出categoryName.m

协议:

@protocal协议:类似于JAVA中的接口interface,定义与类别类似(@optional和@required)

使用协议实例代码:

@interface Car:NSObject<WhbProtocal1,WhbProtocal2>(即承诺要实现2个协议中的所有方法)

■ 谓词筛选过滤(即从集合当中,查找指定元素,如果是简单数组,可使用‘SELF CONTAINS‘关键字)

NSPredicate *predicate;

predicate=[NSPredicate predicateWithFormat:@"name==‘whbname‘"];

//其他运算符实例:car.age>10 && car.age<20 等价于 car.age BETWEEN{10,20}(car 可用 SELF替换)

BOOL match=[predicate evaluateWithObject:car];

NSLog(@"%s",(match)?"YES":"NO");

NSArray *cars=[garage cars];//设置一个等待搜索的大集合

方法一:

//集合筛选-》从集合当中,查找指定元素

//一般的for遍历方式____begin

for(Car *car in cars)

{

if([predicate evalueWithObject:car])

{

NSLog(@"%@",car.name);

}

}

//一般的for遍历方式____end

//方法二:

//集合筛选-》从集合当中,查找指定元素,组成新集合

NSArray *resultArray;

resultArray=[cars filteredArrayUsingPredicate:predicate];//提示:一个filteredArrayUsingPredicate代替了for循环的3条语句

NSLog(@"%@",resultArray);

如果是想打印所有car对象的某个属性,则用如下方式:

NSArray *names;

names=[resultArray valueForKey:@"name"];

特别说明:方法一,方法二运行效率一致。

■ 内存管理(重要):

自动释放池(必须自己创建,可以有多个,栈形式):

NSAutoreleasePool *pool;

pool=[[NSAutoreleasePool alloc] init];

......

[pool release];

特别注意:(1)drain只适合于10.5以上版本(2)drain只是清空池,并不释放池本身

内存管理规则:

如果使用new,alloc,copy三个方法其中的任何一个,必须使用release 显示释放内存,其余则由系统自动管理即可。

另,如果你想一直拥有某个对象,则需要在dealloc中释放即可。

特别注意:

如果在某个类的实例方法中,将某个类实例属性用new,alloc,copy三个方法其中的任何一个进行了初始化,

那么必须在该类实例的dealloc方法中,显示释放该对象,用法示例如下:

-void dealloc

{

[whbProperty realease];

[super dealloc];

}

其他注意事项:

whbProperty=nil;//并不能释放内存,仅仅是将指向实体对象的指针,指向了nil,而实体对象本身直接内存泄露

================以下仅供备忘参考,不经常使用

防止内存泄露的方法:

-void setEngin:(Engine *)newEngine

{

[newEngine retain];

[engine release];

engine=newEngine;

}

自动释放资源(苹果不建议用,详见三条规则):

NSString *description;

[description autorelease]; //并不增加计数器的计数

开启垃圾回收机制(10.5以上版本适用,注意不支持ipone开发)

build选项卡-》Setting-》Object-c carbage Collection-》设置为required[-for-gc-only]

■ 函数集锦

//16进制颜色转UICOLOR

+(UIColor *) colorWithHexString: (NSString *) stringToConvert

{

NSString *cString = [[stringToConvert stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];

// String should be 6 or 8 characters

if ([cString length] < 6) return [UIColor blackColor];

// strip 0X if it appears

if ([cString hasPrefix:@"0X"]) cString = [cString substringFromIndex:2];

if ([cString hasPrefix:@"#"]) cString = [cString substringFromIndex:1];

if ([cString length] != 6) return [UIColor blackColor];

// Separate into r, g, b substrings

NSRange range;

range.location = 0;

range.length = 2;

NSString *rString = [cString substringWithRange:range];

range.location = 2;

NSString *gString = [cString substringWithRange:range];

range.location = 4;

NSString *bString = [cString substringWithRange:range];

// Scan values

unsigned int r, g, b;

[[NSScanner scannerWithString:rString] scanHexInt:&r];

[[NSScanner scannerWithString:gString] scanHexInt:&g];

[[NSScanner scannerWithString:bString] scanHexInt:&b];

return [UIColor colorWithRed:((float) r / 255.0f)

green:((float) g / 255.0f)

blue:((float) b / 255.0f)

alpha:1.0f];

}

乱七八糟: id shapes[3];//定义一个对象数组,里面存各种不同的对象,初始化方法参照:

shapes[0]=[Circle new];

一小时学会object-c

时间: 2024-10-19 17:32:39

一小时学会object-c的相关文章

一个小时学会Maven

目录 一.为什么要Maven二.安装与配置2.1.官网下载安装包2.2.配置环境变量2.3.本地仓储配置2.4.中央仓库配置2.5.命令行创建maven项目2.6.Jetty运行Web项目2.7.在tomcat中运行三.Maven概要3.1.Maven名词解释3.2.Maven的生命周期3.3.Maven标准工程结构3.4.Maven的"约束优于配置"3.5.Maven的版本规范3.6.项目骨架Maven Archetype3.7.maven的项目对象模型四.IDE中使用Maven(I

Python入门教程 超详细1小时学会Python

本文适合有经验的程序员尽快进入Python世界.特别地,如果你掌握Java和Javascript,不用1小时你就可以用Python快速流畅地写有用的Python程序. 假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200. 思路:用shell编程.(Linux通常是bash而Windows是批处理脚本).例如,在Windows上用ping ip 的命令依次测试各个机器并得到控制台输出.由于ping通的时候控制台文本通常

web前端入门:一小时学会写页面

一小时学会写页面 作为一个懒癌晚期患者,总是习惯找各种简单的解决问题的方法,也习惯性把问题简单化,所以今天想分享给大家简单的web前端入门方法.既然题目已经定了一个小时那么废话就不多说了,计时开始 1.什么是前端 简单来说,前端就是做网页(大神勿喷,本文一切从简) 2.前端技术 html,是首字母缩写,具体意义请百度,大家要记住“t”代表text,ok你们没有想错,text就是文本文件text,好了准备工作做好了,现在开始做网页 3.我们的第一个网页 请身边有电脑的小伙伴和我一起开始,在桌面鼠标

Python入门教程 超详细1小时学会Python(转)

假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200. 思路:用shell编程.(Linux通常是bash而Windows是批处理脚本).例如,在Windows上用ping ip 的命令依次测试各个机器并得到控制台输出.由于ping通的时候控制台文本通常是"Reply from ... " 而不通的时候文本是"time out ... " ,所以,在结果中进行字符串查找,即可知道该机器是否

一个小时学会MySQL数据库

一个小时学会MySQL数据库 目录 一.数据库概要 1.1.发展历史 1.1.1.人工处理阶段 1.1.2.文件系统 1.1.3.数据库管理系统 1.2.常见数据库技术品牌.服务与架构 1.3.数据库分类 1.3.1.关系型数据库 1.3.2.非关系型数据库 1.4.数据库规范化 1.4.1. 什么是范式 1.4.2. 三大范式 1.4.3. 范式与效率 二.MySQL介绍 2.1.MySQL概要 2.2.系统特性 2.3.存储引擎 三.快速安装运行MySQL数据库 3.1.使用绿色版 3.1.

1000 个小时学会 Rails (目录)

感谢 juanito 给我们分享1000 个小时学会 Rails ,我这里做个目录链接,这样方便学习. Rails 前世今生 你的第一个 Rails 应用 测试!测试! RSpec 行为驱动测试简介 神秘的 X 项目 X 项目的静态页面 作者不知写完没有,期待更新,待续... 附 juanito 整理的: 62 个 Ruby On Rails 学习资源整理

三小时学会Kubernetes:容器编排详细指南

三小时学会Kubernetes:容器编排详细指南 如果谁都可以在三个小时内学会Kubernetes,银行为何要为这么简单的东西付一大笔钱? 如果你心存疑虑,我建议你不妨跟着我试一试!在完成本文的学习后,你就能在Kubernetes集群上运行基于微服务的应用程序.我之所以能保证这一点,是因为我就是这么向客户介绍Kubernetes的. 这份指南与其他文章有何不同之处? 相当多!大多数指南是从Kubernetes概念和kubectl命令这类简单的东西开始的.它们假定读者熟悉应用程序开发.微服务和Do

Android开发工程师文集-1 小时学会Widget小组件开发

前言 大家好,给大家带来Android开发工程师文集-1 小时学会Widget小组件开发的概述,希望你们喜欢 学会用Widget (小组件) Widget小组件很方便,很快捷,可以个性化,自己定制,相关功能,可以实时更新最新内容. Widget布局,Widget配置,AppWidgetProvider与Configuration Activity Android Widget xml布局类型:AppWidget Provider <appwidget-provider xmlns:android

Android开发工程师文集-1 小时学会SQLite

前言 大家好,给大家带来Android开发工程师文集-1 小时学会SQLite的概述,希望你们喜欢 内容 什么是Sqlite: 效率高,开源,小型,程序驱动,支持事务操作,无数据类型,可嵌入的关系型数据库 独立的,跨平台的,代码量少,简单易用 创建表语句 create table student(_id Integer primary key, name varchar(10), age Integer not null); 删除表 drop table student; 插入数据 Insert