IOS开发复习笔记(1)-OC基础知识

在上班之余学习IOS已经有三个多月了,因为基础有些薄弱从OC的基本语法开始学习的,相继看了青柚子和红柚子的书,现在在看编程实战,趁这个机会好好的总结一下:

1.命名约定

对象类型和名称一致,以免混淆

-(void) setURL:(NSString *)URL;//错误的命名方法

//更改为
-(void)setURLString:(NSString *)string;
-(void)setURL:(NSURL *)URL;

静态变量(包括作用域)以s开头,而全集变量采用g开头,在通常情况下应避免使用常量之外的全局变量:

static MYThing *sSharedInstance

常量在Cocoa和Core Foundation中以k开头,在Cocoa中则不是,建议文件作用域内的(静态)常量都以k开头:

static const NSUInteger kMaximumNumberOfRows=3;
NSString *const MYSomethingHappenedNotification=@"SomethingHappeded";

方法参数名称通常要加一个冠词(a,an,the)(楼主注:貌似不是很常见啊),用这种方式对参数进行命名可以避免与方法中的局部变量和实例名称混淆

实例变量以下划线开头

类名以大写字母开头,方法名和变量名则应该以小写字母开头,所有类名,方法名都采用驼峰式大小写(即每个单词的首字母大小写)进行分隔,而不采用下划线

2.自动引用计数

ARC不是垃圾回收,它只是一种编译器优化,因此它不能处理循环引用的问题:

垃圾回收机制如果外部对象到对象A的引用链接中断,则对象A和对象B都会被销毁,但那时ARC中因为A,B的相互引用,其引用计数都大于1,因此在IOS开发中必须做好对强引用的管理

属性的关系有两种主要类型:strong和weak,相当于非ARC环境中的retain和assign,只要存在一个强引用对象就会一直存在,不会被销毁。而weak在引用的对象被销毁后,weak的引用会被自动置为nil,所以delegate的属性总是应该声明为weak。

3.属性

在头文件声明公有属性,.m文件中声明私有属性:

//MyClass.h
@interface class: NSObject
@property (nonatomic,readwrite,weak) id delegate;
@property (noatomic,readonly,strong) NSString *readonlyString;
@end
//MyClass.m
@interface MyClass()
@property (noatomic,readwrite,strong) NSString *readonlyString;
@property (noatomic,strong) NSString *privateString;
@end

编译器会自动创建_delegate,_readonlyString,_privateString几个变量,不过只能再init,dealloc中调用这些实例变量

另外可以看到在.m文件中重新声明了一下readonlyString变量,为它增加了一个setter的私有方法

属性的修饰关键字:

1)原子性(atomic,nonatomic)

本意是指属性的存取器方法是线程安全的,并不保证整个对象是线程安全的。比如使用NSMutableArray声明一个stuff,使用

self.stuff和self.stuff=otherstuff(只涉及到存取),而采用objectAtIndex的方法访问数组的时候并不是线程安全的。

但是如果属性并不需要其他线程访问的时候,使用原子属性是一种极大的浪费,因此通常情况下采用的是nonatomic

2)读写属性(readwrite和readonly)

3)设置方法修饰的关键词(weak,strong,copy)

注意的是对于不可变类如NSString和NSArray使用copy修饰

IOS开发复习笔记(1)-OC基础知识

时间: 2024-12-28 22:54:10

IOS开发复习笔记(1)-OC基础知识的相关文章

iOS开发系列--C语言之基础知识

概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift 这么看下去还有大量的内容需要持续补充,但是今天我们从最基础的C语言开始,C语言部分我将分成几个章节去说,今天我们简单看一下C的一些基础知识,更高级的内容我将放到后面的文章中. 今天基础知识分为以下几点内容(注意:循环.条件语句在此不再赘述): Hello World 运行过程 数据类型 运算符 常用

IOS开发复习笔记(3)-ARC

1.ARC 当你自己调用了release或retain语句的时候,ARC有效时编译文件会遇到错误,你可以通过-fno-objc-arc和-fobjc-arc两个编译器标志在混搭中支持ARC和非ARC的代码 如下面编译支持ARC,而文件代码不支持ARC # if !__has_feature(objc_arc) //this code do not support to ARC -(void) release{ //release your var } #endif 在ARC工程中集成非ARC的第

IOS开发复习笔记(4)-TableView

总结几个TableView常用的代码 初始化方面 static string CellIndetifier="cellIndetifier"; -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ return 1;//表中段数 } -(NSInterger)tableView:(UITableVIew *)tableView numberOfRowsInSection:(NSInteger)section{

iOS开发学习笔记:基础篇

iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境),Xcode是一个集成开发环境,包括了编辑器.调试.模拟器等等一系列方便开发和部署的工具,iOS SDK则是开发应用所必需,不同的SDK分别对应不同的iOS版本或设备,通常我们需要下载多个iOS SDK以确保我们开发的程序能够在不同版本的iOS上正常运行. 创建新工程 Xcode提供了很多种工程模

斯坦福大学IOS开发课程笔记(第七课第二部分)

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/32163347 作者:小马 本篇是demo演示,程序其实就是上节课的心理学家那个demo, 不过在这个demo的基础上,把它作成一个通用版,可以自动识别当前运行的设备是iphone还是ipad,然后有不同的显示效果.所以,还是打开原来的Psychologist工程,在开始之前,我会用第五课讲的自动布局知识,让视图能在横屏模式下也可以正常显示.这一部分不细讲,参考第五课. 下面就可以

IOS学习之斯坦福大学IOS开发课程笔记(第六课)

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/28398697 作者:小马 这节课主要讲述多个MVC是如何协同工作的.到目前为止,所有的课程都只是涉及到一个视图.从这节课开始,将会持到多视图应用的例子. 多视图开发这里用navigationController举例子.这个也是比较常用的.如上图所示,一个 navigation Controller(MVC)会指向一个rootViewController(另一个MVC),这个是第一

iOS开发范例实战宝典(基础篇)——互动出版网

这篇是计算机类的优质推荐>>>><iOS开发范例实战宝典(基础篇)> 以最新的IOS 8为版本编写,内容覆盖了IOS开发的方方面面,通过大量实例提升实战技能,并对书中的重点和难点进行了专门分析. 编辑推荐 *以最新的iOS 8为版本编写,内容覆盖了iOS开发的方方面面* *通过200多个实例提升实战技能,并对书中的重点和难点进行了专门分析 *注重实战:详细讲解了117个iOS开发经典实例,提高实战开发水平 *内容全面:全面介绍了iOS开发中最为常见的14类界面模块 *由

iOS开发网络篇—网络编程基础

iOS开发网络篇—网络编程基础 一.为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力 (3)如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将变成一潭死水 移动网络应用 = 良好的UI + 良好的用户体验 + 实时更新的数据 新闻:网易新闻.新浪新闻.搜狐新闻.腾讯新闻 视频:优酷.百度视频.搜狐视频.爱奇艺视频 音乐

安卓开发复习笔记——Fragment+FragmentTabHost组件(实现新浪微博底部菜单)

记得之前写过2篇关于底部菜单的实现,由于使用的是过时的TabHost类,虽然一样可以实现我们想要的效果,但作为学习,还是需要来了解下这个新引入类FragmentTabHost 之前2篇文章的链接: 安卓开发复习笔记——TabHost组件(一)(实现底部菜单导航) 安卓开发复习笔记——TabHost组件(二)(实现底部菜单导航) 关于Fragment类在之前的安卓开发复习笔记——Fragment+ViewPager组件(高仿微信界面)也介绍过,这里就不再重复阐述了. 国际惯例,先来张效果图: 下面