当前位置: 首页 > news >正文

iPhone入门学习——Objective-C学习文档

iPhone入门学习——Objective-C学习文档


一.数据类型


1.NSRange
typedef struct _NSRange {

NSUInteger location;

NSUInteger length;
} NSRange;
2.NSPoint,NSSize,NSRect
3.NSString
方法1:(类方法)stringWithFormat [NSString stringWithFormat ""]
方法2:length
方法3:isEqualToString [实例名1 isEqualToString:实例名2]
方法4:compare 可以带参数
方法5:hasPrefix hasSuffix
4.NSMutableString
方法1:(类方法)stringWithCapacity [NSMutableString stringWithCapacity:表示大小的数字]
方法2: appendString  appendFormat
方法3: deleteCharactersInRange  rangeOfString 
5.NSArray
方法1:(类方法)arrayWithObject 逗号分隔,以nil结束
方法2:count  objectAtIndex
6.NSMutableArray
方法1:(类方法)arrayWithCapacity
方法2:addObject  removeObjectAtIndex
7.NSEnumerator
方法1 bjectEnumerator   reverseObjectEnumerator
方法2:nextObject
8.NSDictionary
方法1:(类方法)dictionaryWithObjectsAndKeys 接收对象和关键字交替的存储的系列,以nil结束
方法2:objectForkey
9.NSMutableDictionary
方法1:(类方法)dictionaryWithCapacity
方法2:setObject:forKey: removeObjectForKey
10.NSNumber
用来把基本数据类型包装成对象的形式
11.NSValue
可以包装任意值
12.NSNull
[NSNull null]表示空

二.内存管理



1.Cocoa内存管理规则



(1)当你使用new、alloc或copy方法创建一个对象时,该对象的保留计数器值为1。当不再使用该对象时,你要负责向该对象发送一条release或autorelease消息(用完后或者在dealloc方法中进行统一释放)。这样,该对象将在其使用寿命结束时被销毁。



(2)当你通过任何其他方法获得一个对象时,则假设该对象的保留计数器值为1,而且已经被设置为自动释放,因此就不需要执行任何操作来确保该对象被清理。



自动释放池:



    NSAutoreleasePool *pool;



pool = [[NSAutoreleasePool alloc] init];



[pool release]; 



如果你打算在一段时间内拥有该对象(使用retain方法),则需保留它并确保在操作完成时释放它(用完后或者在dealloc方法中进行统一释放)。



(3)如果你保留了某个对象,则需要(最终)释放或自动释放该对象。必须保持retain方法和release方法的使用次数相等。



注:简单来说,如果使用了alloc,new或copy方法获得一个对象,则必须进行释放该对象操作。



三.对象初始化



1.基本知识



(1)Objective-C创建对象有两种方法:



[类名 new]:直接new一个新对象



[[类名 alloc] init]:先为对象分配内存空间,再为其初始化



(2)在Cocoa中,对象分配和初始化是两个分离的操作:来自NSObject的类方法alloce为对象分配一块内存并将其清0;实例方法init用于获得一个对象并使其运行



2.便利初始化函数



一个类中有的多个初始化函数,即多个以init开头的方法。



3.指定初始化函数


类中的某个初始化方法被指派为指定初始化函数,该类的所有初始化方法使用指定初始化函数执行初始化操作。子类使用其超类的指定初始化函数实现超类的初始化。

四.特性(property)



1.基础知识



特性的预编译指令为@property,作用是自动声明属性的setter和getter方法,因此就不必再有为每个属性都写的访问器方法而产生的冗长代码了。



即使用预编译指令@property通知编译器为对象的属性的setter和getter自动生成方法声明。



同时使用@synthesis预编译指令通知编译器生成对应的访问器方法。



2.格式



在.H文件中声明:@property 类型 变量名;



在.M文件中实现:@synthesis 变量名;



3.相关的点语法



访问属性的setter和getter方法有两种方式:



(1)[对象 属性方法]:Objective-C特有的正规的[ ]方式



(2)对象.属性方法:和其他语言类似的.方式



4.特行扩展



在特性的声明里可以指定属性的一些要求,比如copy,retain,nonatomic,readwrite(默认),readonly等,方式为比如



@property (retain,nonatomic) 类型 变量;



五.类别



1.基本知识



类别是为现有的类添加新方法的方式



2.格式



(1)声明:



@interface 类名(类别名)



方法列表



@end



(2)实现:



@implementation 类名(类别名)



方法实现部分



@end



3.类别局限性



(1)类别只能添加新方法,无法添加新的实例变量



(2)如果类别名和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级



4.类别的作用



通过类别的方式,可以将类的实现分散到不同的文件里。



六.协议



1.基本知识



Objective-C的协议类似Java里的接口概念



2.格式



(1)声明:



@Protocol 协议名称



方法声明列表



@end



(2)对象采用协议:在@interface类声明的后面添加<协议名称>



@interface 类名 <协议名称>



(3)对象实现协议:在@implementation里实现协议的方法



@implementation 类名



实现协议的方法



@end



3.Objective-C2.0中协议的新特性



(1)@optional预编译指令:表示可以选择实现的方法



(2)@required预编译指令:表示必须强制实现的方法

from: http://bbs.51cto.com/thread-844683-1.html

相关文章:

  • Android 开发中的网络下载策略 与 文件缓存策略
  • 关于代码重构的一些思考
  • Android使用VideoView播放网络视频
  • [Android 数据通信] android cmwap接入点
  • 转: 新浪微博布局学习——妙用TabHost
  • 系出名门Android(7) - 控件(View)之ZoomControls, Include, VideoView, WebView, RatingBar, Tab, Spinner, Chrono
  • android webview拦截超链接
  • android应用中插入flash
  • Android开发_WebView组件使用详解_LoadUrl直接显示网页内容
  • android开发我的新浪微博客户端-用户授权页面功能篇(3.2)
  • Android 调用平台功能 - 启动浏览器 支持file://
  • Android学习笔记之mainfest文件中android属性
  • android有效的内存使用
  • Android使用AsyncTask下载图片,最好使用WeakReference
  • Android笔记 SQLite总结 ,字带数据库,附记事本,字典小程序
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • css的样式优先级
  • Go 语言编译器的 //go: 详解
  • mongodb--安装和初步使用教程
  • ReactNativeweexDeviceOne对比
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Spring Cloud中负载均衡器概览
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 给初学者:JavaScript 中数组操作注意点
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 如何在GitHub上创建个人博客
  • 什么是Javascript函数节流?
  • 双管齐下,VMware的容器新战略
  • 为什么要用IPython/Jupyter?
  • 我的业余项目总结
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • #define用法
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • %@ page import=%的用法
  • (C++20) consteval立即函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (超详细)语音信号处理之特征提取
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (十)T检验-第一部分
  • (一)Neo4j下载安装以及初次使用
  • (一)UDP基本编程步骤
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .NET Core 项目指定SDK版本
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .NET Micro Framework初体验(二)
  • .NET中winform传递参数至Url并获得返回值或文件
  • /etc/fstab 只读无法修改的解决办法