IOS学习笔记2—Objective C—类、属性、方法
来源:互联网 发布:梅西大学怎么样 知乎 编辑:程序博客网 时间:2024/05/01 13:35
1.OC是一门基于C的面向对象语言,是C语言的一个超集,同时具有C语言的特征
2.OC对类的定义和实现以及初始化
//声明类接口,继承NSObject对象(该对象是OC中所有类的顶级父类,所有类都继承于它)
@interface ClassName :NSObject
//成员属性和成员函数的声明
+(void)function;//类方法,不需要实例化对象就可以调用的方法
- (void)function2 :(NSString *)arg;//成员方法,必须通过实例化的对象调用
@end
//实现类
@imlementation ClassName
//成员属性初始化和方法的定义
@end
对象的初始化:ClassName *obj = [[ClassName alloc] init]
OC中以消息机制传递信息,发送alloc消息给类分配内存空间,发送init消息生成对象,指针指向对象本身。
3.类方法的调用
[obj function];
NSString *str = [NSString stringWithString:@"hello"];
[obj function2 : str];
4.输出函数
根据不同的输出格式输出不同的值 (%d :整形 ,%@:对象<发送description消息>,%s:字符串)
NSlog(@“The result is %d”,intNum);
CF代表Core Foundation (Cocoa)
CFShow发送description给它显示的对象,CFShow打印的信息不会显示时间戳,NSLog会显示,同时CFShow不需要格式字符 串,它只能用于对象
CFShow(obj);
5.属性
支持点表示法:myTableViewCell.textLabel.text = @"hello" 等价于 [[myTableViewCell textLabel] setText:@"hello"];
使用属性生成器 property
在h文件中声明: @property int year
在m文件中合成生成器:@synthesize year
使用 obj.year = 1999 相当于调用了 [obj setYear:1999];
可以自定义取值方法和赋值方法(getter and setter)
-(int)year
{
return year;
}
- (void) setYear : (int) newYear
{
//此处添加了一些基本的内存管理方法,保留新的值,释放以前的值
if(newYear != year)
{
[year release];
year = [newYear retain];
}
}
也可以绕过oc的命名约定,自己指定getter和setter方法的名称;
@property(getter = isExist,setter = setExist:) BOOL exist;
@synthesize exist;
使用过程中既可以使用新定义的方法名,也可以使用以前的方法(点表示法)
属性的特性:readwrite readonly assign retain copy nonatomic
assign:默认行为,使用@property int year就使用了assign行为,就是给实例变量赋了一个值
retain:实现了两个功能,一个是保留了赋值时传递的对象,其次是赋值前释放了以前值,使用retain可以实现上面讨论的内存管理的优点,使用时加上 @property (retain)int year;
copy:发送一条复制的消息给被传递的对象,保留它,并释放任何以前的值;
nonactomic:非原子访问器,加上后可以提升访问速度,但当两个线程同时修改同一个属性时就会出现问题,原子属性可以保证属性在被一个线程使用时不被另一个线程访问,不存在atomic关键字,默认情况下,所有方法都是自动合成的。(类似与java中的线程锁机制synchronized)
readwrite:可读写
readonly:只读
今天简述一下简单的内存管理,在IOS5.0以后Apple增加了ARC机制(Automatic Reference Counting),给开发人员带来了不少的方便,但是为了能更好的理解IOS内存管理机制,还是需要对其比较了解。
1.在OC中,每个对象都有一个保留计数,创建时每个对象都有一个初始值为1的保留计数,释放时,保留计数都为0
2.创建自动释放的对象
要求以一个方法创建对象时,以自动释放的形式返回该对象是一个很好的编程实践
+(Car *)car
{
Car *myCar = [[Car alloc] init];
return [myCar autorelease];
}
3.创建已保留属性
@property (retain)NSArray *colors;
synthesize创建后,自动保留该对象,如果该对象被重新赋值,前面的值将被自动释放
4.创建对象的其他方式
一般规则:通过alloc、new、create、copy的任意方法构建一个对象,就必须承担释放该对象的责任,和类方法不同,带这些字样的方法一般不会返回自动释放的对象
5.释放对象
释放属性:self.year = nil;会调用OC合成的自定义赋值方法,并释放以前赋值给该属性的任意对象
释放实例变量(非属性):[age release]; 实例变量在对象生命周期内,随时可以指向一个保留计数+1的对象,必须释放当前赋值给age的任意对象,从而将计数置为0;
- IOS学习笔记—Objective C—类、属性、方法 .
- IOS学习笔记2—Objective C—类、属性、方法
- IOS学习笔记2—Objective C—类、属性、方法
- IOS学习笔记2—Objective C—类、属性、方法
- IOS学习笔记2—Objective C—类、属性、方法
- IOS学习笔记2—Objective C—类、属性、方法
- IOS学习笔记2—Objective C—类、属性、方法
- [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第十一章 属性
- Objective-C学习笔记(二十五)——属性与方法的继承学习
- ios学习路线—Objective-C(属性修饰符)
- 黑马程序员——Objective-C学习笔记(八): 属性
- IOS学习笔记01-关于objective-c的成员属性
- 【IOS学习】Objective-C 类、属性、属性特征
- iOS学习笔记(2) - Objective-C基础
- 第二章、Objective-c 语法,类/属性/函数(iOS学习笔记,从零开始。)
- IOS学习笔记6—Objective C—Foundation框架
- IOS学习笔记—Objective C—创建单例 .
- ios学习路线—Objective-C(Runtime方法与消息)
- Android按键事件处理流程 -- KeyEvent
- Android TouchEvent事件传递机制
- C语言的关键字typedef的用法
- ZOJ 3329 One Person Game 概率dp 处理环
- 1.Cocos2dx 3.2中vector,ValueMap,Touch触摸时间的使用.iconv字符编解码
- IOS学习笔记2—Objective C—类、属性、方法
- 黑马程序员——面向对象<一> 笔记第三篇
- Android touch mode和focusableInTouchMode分析
- devstack方式部署all-in-one openstack如何修改instances的目录
- sgu132:Another Chocolate Maniac
- CocoaPods详解之----进阶篇
- 端口被占用的处理方法
- hibernate与Mysql-Dialect问题
- 实现Collection和Map接口的常用类的几种循环方法