欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Objective-C,

来源: 开发者 投稿于  被查看 25297 次 评论:157

Objective-C,


今天简单的介绍一下Objective-C的语法吧,现在iOS开发的小伙伴们大部分都是有一定语言基础的,语言之间是具有相通性的,那么我们就来简单的了解一下哦槽语法吧,首先写惯Java语言和c语言的兄弟们一定对OC不太习惯吧,因为OC语言的每个方法前都加了一个横杠,或者是加号,那么他们之间有什么联系呢下面我们就看看他们的区别吧

- (void)Demo:(int)age {

_age = age++;
}

那么在加号呢加号就和我们Java里的静态方法类似前置加号(+)的方法为类方法是可以用类名直接调用的,它的作用主要是创建一个实例,如下代码:

+ (id)initDemo:(int)age {
// 在这里插入代码逻辑
}

那么就会它的命名是有一定的命名规范的,首先是+/-(方法的类型)方法名:(变量类型)变量名好吧我们在介绍下一个语法,

self

有Java基础的兄弟们对self的用法就比较好理解了,self就相当于Java中的this,self在实例方法中(-)可以当这个实例的方法使用,如果self在静态(+)方法中可以当类对象使用如下代码:- (void)age {    return self.age;// 这里self是实例对象自身 } + (id)newDemo {
//Student *student = [[[Student alloc]init]autorelease];
Student *student = [[[self alloc]init]autorelease];// 这一句和上一句代码的效果是等效的,而在java语法是不允许this出现在静态方法中的
return student; }

基接下来我们聊聊OC中的import和@class

#import <xxxxxxx.h>和class在一些效果上#import和@class是相同的,但是我们为什么要引入class呢那就是因为class在一些特殊的情况下引入的类会和现在的类的方法相冲突,如果我们用class那么就会避免这种情况的发生。class代码使用方法如下:// #import "Demo.h"
@class Demo; // 不需要导入Book.h头文件,在.m文件真正使用的时候再导入
@interface Student : NSObject
@property Book *book;
@end

下面我们再来聊聊Block类型的使用方法,我们学过C语言的朋友会发现这就和C语言中的指向函数指针类型的写法很相似

如:定义一个Demo的Block类型,返回值为int,有两个int形参 int (^Demo) (int, int) = ^(int a, int b) {
return a + b;
};  18、内存管理  1> 凡是从NSObject中继承的类都需要自己管理内存,在OC语法中,创建的任何一个对象都拥有一个引用计数器,第一次创建的时候这个引用计数器为1,当引用计数器的值为0时,该对象会被销毁。内存管理涉及到以下接口:   * release : 对象的引用计数器减1   * retain : 对象的引用计数器加1   * retainCount : 获取对象当前引用计数器的数量     对象生命周期回调接口:   * init : 对象的默认构造方法,如果自定义构造方法用于初始化成员变量时,必须先调用父类的构造方法,并判断获得的对象是否为nil,再初始化成员变量。   如:- (void)initWithAge:(int)age {
     if ( self = [super init] ) {
         _age = age;
 }
 return self;
 }     * dealloc : 对象销毁时,系统会自动调用该方法,通常在该方法中释放内存或其它资源。在重写dealloc方法时,注意在代码最后面调用父类的dealloc方法,用于释放内存等相关资源。

 如:

- (void)dealloc {

 [_book release];// 释放成员变量
 [super dealloc];
 }    2> 不需要管理内存的对象   * 基本数据类型   * 系统自带的类调用自己的静态方法创建的对象,是自动释放内存的,不需要管理    3> 内存管理原则   只有向对象发送了alloc,retain,copy,new消息才有必要做release操作   * 谁alloc,retain,copy,new谁release   * 谁创建谁释放(release)   * 谁没有allock,retain,copy,new,你就不要做release操作    4> 自动内存管理(由autoreleasepool管理)   在创建对象的同时,调用autorelease方法,会将该对象的一个 引用自动存放到最近创建的一个自动释放释放池中。以后该对象就不需要手动来release操作,徐非做了retain,copy等修改了引用计数器的操 作。当自动释放池被销毁时,会向池子中所有对象发送一个release消息,池子中的所有对象的引用计数器此时会减1,只有当池子中的引用计数器为0时, 该对象才会被彻底销毁。不是说只要将对象交给自动释放池了,池子被销毁,池子中的所有对象就一定会被销毁。  

 如:@autoreleasepool {

 Student *student = [[[Student alloc] init]autorelease];// 此时student对象将放到这个大括号中的自动释放池子中     [student retain];// 如果加了这一句,此时stu的引用计数器为2,这时候如果在池子销毁前没有向对象发送release消息,就算池子销毁,该对象也还是会造成内存泄露     } // 程序执行到此处,代表自动释放池被销毁,意味着池子中的所有对象都会接到一个release消息

我们再聊聊OC中的toString方法

Student *student = [[[Student alloc]init]autorelease]; NSLog(@"%@",student);// 默认打印的是student对象的内存地址 * 重写父类的description方法,可自定义打印对象的信息 - (NSString *)description {    NSLog(@"age is %i",_age);

}

在OC中的方法怎么调用呢,那么用如下几种调用的方法:

* [实例对象 方法名:参数列表]
* [类名 方法名:参数列表]
例:
myDemo *mydemo = [[[myDemo alloc]init]autorelease];
[mydemo setAge:23 andNo:10];// 调用实例方法

[myDemo initWithAge:25];// 调用静态方法

相关文章

    暂无相关文章

用户评论