Objective-C语法:
一:对象声明语法:类名 * 对象名 = [[类名 alloc] init]
[对象名 release] //释放对象的实例
注:alloc是NSObject的类方法,init是实现类的初始化方法
二:类
@interface MyClass:NSObject //接口
{
int count;
id data;
NSString * name;//变量
}
- (NSString *) getName;//方法
- (void)setName:(NSString *)name
+ (float)classMethod:(float *)Method1 keyword:(int) Method2
@end
@implementation MyClass //实现
- (NSString)getName
{
return @"";
}
@end
三:方法
声明:
+/-(返回类型)方法名:(参数类型1)参数名1 参数说明关键字:(参数类型2)参数名2 (...)...
- 类实例的方法
1-[self 方法名]
2-MyClass * myclass = [[MyClass alloc] init];
[myclass setName:@"name"];
+ 类的方法
[MyClass classMethod:12.5 keyword:1]
Objective-C基础语法:
1--文件类型
.h 头文件:类,类型,方法,结构体等声明
.m 实现文件:OC 和 C的代码
.mm 实现文件:C++和OC的代码
#import 确保头文件不被重复引用
2--字符串
@"string";
%d 十进制整数
%f 十进制小数(浮点型)
%c 字符
%s 字符串
%@ OC字符串
3--日志打印
printf("log message");
NSLog(@"log message");
4--数据类型和表达式
C语言基本数据类型:int float double char
其它数据类型:Long Longlong Short Unsigned(无符号型0--255) signed(有符号类型-128--127)
OC数据类型:
id 标识任何类的对象
BOOL boolean(YES/NO)
NIL NULL
SEL
SEL oneMethod=@selector(render);//@selector 得到一个方法的指针
[oneObject performSelector:oneMethod]
// 传入名为render的方法,使得oneMethod成为指向render方法的指针,oneObject是实例化的对象
// 通过呼出performselector来执行render方法。performSelector是NSObject类的实现方法。
YES
NO
5--循环
for(n=1;n<11;n=n+1){}
while(n <= 5){}
do{}while(n != 1)
6--条件
if(){}else{};
switch(){case ...}
XX?SS:CC
7--内存管理(计数器半自动化管理)
alloc +1
release -1
copy 1 重新生成一个新的实例
retain +1
autorelease 再pool栈顶添加此对象
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[pool drain]
8--继承
@interface subClassName:superClassName
-(BOOL)isKindOfClass:class-object // 判断对象是否是某一种类的实例(包括其父类)
-(BOOL)isMenberOFClass:class-object // 判断对象是否是某一种类的实例(不包括其父类)
-(BOOL)respondsToSelector:select // 判断对象是否实现某个方法
+(BOOL)instancesRespondToSelector:selector //判断类的实例是否实现某个方法
+(BOOL)isSubclassOfClass:class-object //判断一个类是否是某个类的子类
-(id)performSelector:selector // 让对象呼叫指定的方法
-(id)performSelector:selector withObject:object // 让对象呼叫指定的方法并带有参数
A * a = [[A alloc] init];
if([a isKindOfClass:[A class]] == YES){}
9--类别和协议
类别:@interface myClass(类别名) 类别和继承类似,但类别只能添加新的方法不能添加任何实例变量
协议:类似于Java的interface
协议的声明:
@protocol protocolName
@optional // 默认实现的方法
-(void)method1
@required // 必须实现的方法
-(void)method2
@end
协议的使用:
@interface myClass:superClass<protocol1,protocol2, ...>
协议实现对象委托:
@protocol proA
-proMethod1;
-proMethod2;
@end
@interface myClassA:NSObject
{
// 代理变量
id _delegate;
}
// 代理方法
@property(nonatomic,retain) id _delegate;
-(void)callDelegateMethod;
@end
@implement myClassA
@synthesize -delegate;
-(void)callDelegateMehtod
{
[_delegate proMethod1];
[_delegate proMethod2];
}
@end
@interface myClassB:NSObject<proA>
-(void)testDelegate;
@end
@implement myClassB
// 协议(接口)方法实现
-(void)testDelegate
{
myClass * myA = [[myClass alloc] init];
// 设置代理
_delegate self;
[myA callDelegateMethod];
}
@end
10--属性
声明:@property (修饰) 类型 属性名
@property(nonatomic,retain) id _delegate;
实现:@synthesize 属性名
@synthesize -delegate;
修饰的类型:
readwrite: 变量可读写
readonly: 变量只可以读,需要手动添加setter
assign: 变量可以直接赋值,内存引用计数值不变
retain: 对象进行一次引用,内存引用计数值+1
copy: 复制一个新的对象,内存引用计数值为1
nonatomic: 默认为atomic 在多线程是变量互斥
11-快速枚举
NSArray * array = [NSArray arrayWithObjects:@"ome",@"two",@"three",nil];
NSDictionary
NSManagedObjectModel
NSSet
----------------------------------
for(NSString * element in array){}
----------------------------------
NSEnumerator * enu = [array reverseObjectEnumerator];
for(NSString * element =[enu nextObject])
{
if([element isEqualToString:@"three"])
{
break;
}
}
---------------------------------
OS中OC是很重要的语言,通过看《Objective C Programming》,能让我对OC有个大概的了解。为了加深印象,特于此加以总结。
OC是源于SmallTalk的,起源甚至比C++还早。其直接父系语言为C语言。
OC通过@interface-@end以及@implementation-@end来实现类声明和定义。
OC中类一般至少继承与Object类
OC中所有的类对象必须动态申请,也就是说没有局部变量这么一说。
OC中类没有所谓的构造函数和析构函数,所以如果一个类中有其他类的数据(动态申请的),那么释放内存就不能依赖析构函数,但可以采用重写-(id) free来实现类中所有数据释放。
OC中成员变量也有三种访问权限,@public,@protected,@private。但默认的是@protected,而C++中默认是private。
OC中成员函数只有两种,一种是实例函数,一种是类函数。实例函数就是C++中的Public函数,类函数就是public中的static函数。
OC中成员函数如果要接受多个参数,则需要每个参数前加冒号(虽然教科书上说参数后加冒号,但就我看来说成参数前加更能让C++Programmer理解)。例如-( int ) Set : ( int ) A : ( int ) B ;每个形参前还可以加一个参数名,并成为函数名的一部分。例如-( int ) Set : ( int ) A And : ( int ) B;在使用时[ classTest Set : 10 And : 12 ]; 起初看起来确实不习惯。。。
OC中还多了一个id类型,通过测试,id就是指针。32位机器上为4字节。
OC中多了很多运行时态的机制,其中id的特殊用途,可以通过id类型的变量,调用不同类的同名函数,即使这些类没有任何关系。
OC可以给已类添加新的函数。@interface classExist( NewMethodGroup )-@end,@implementation classExist( NewMethodGroup )-@end。
OC可以将让某类A,代替某类B。通过poseAs关键字。例如:[FractionB poseAs: [Fraction class]];此后使用Fraction类时,就转换成使用FractionB了。
OC还有protocol概念。protocol实际是一组函数,支持改协议的类都应重写这些函数。通过@protocol-@end来声明protocol。类中通过<protocol1,protocol2,...>来表示支持某个协议。如@interface A : Object < NSCopying, NSTransform >-@end表明类A继承与Object类,并支持两个协议(NSCopying, NSTransform )。
OC最后总结,其类实现以c为基础。@interface classTest - @end是相当于一组宏,帮你将类的所有成员变量声明组织为一个结构体,成员函数实际就是普通函数,是在原来成员函数基础上,修改函数名称,添加结构体指针到第一个参数。id类型实际也就是指针。难怪OC的类看起来不像C的一般语法,原因就是其源自C的一般语法,采用新的类脚本的方式,实现的类功能。
分享到:
相关推荐
3. OC基础语法,对比了OC和C语言的一些区别和共同点。 4. 面向过程与面向对象的概念,并解释了使用面向对象思维解决问题的好处。 5. 类与对象的概念,如何定义一个类,如何创建对象并访问对象的属性。 6. 方法的声明...
OC学习笔记合集,记录整理学习OBJECT-C过程中遇到的问题。
【无限互联】iOS开发视频教程第1、2章OC基础语法源代码, 对应第1、2章视频和课件使用。
【无限互联】iOS开发视频教程课件第1.2章OC基础语法课件 , 配合源代码和视频教程使用: 视频地址: http://www.tudou.com/programs/view/eXYMTgiCfm8/
基本语法的PPK初学先了解下,后续有需要留言。我会更新。
从头到尾,教你如何理解OC,多练,多看,多理解,希望对你有帮助
代码中是JSPatch学习笔记的UI基础部分,其中包括以下内容: 1. 项目环境配置 2. 变量 * 局部变量 * 全局变量 * 使用OC中的枚举类型 `Objective-C 里的常量不能直接在 JS 上使用,可以直接在 JS 上用具体值代替,...
如果你想要学好OC语言,请不要错过,史上最全的OC笔记,教你快速掌握,这是我亲自总结的
里边包含OC的一些基础的相关知识点,想要学好OC的可以点击看看
ios游戏开发之cocos2d-oc最新学习笔记
KVC,KVO,Category,load.initalize,关联对象,关联对象,OC对象本质,事件的产生传递及响应,block底层研究
php从入门到精通的关于总结的html各种属性的应用
oc宝典 oc宝典 oc宝典 oc宝典 oc宝典 oc宝典oc宝典 oc宝典 oc宝典
iOS 学习OC语言部分,代码和笔记,超详细
无限互联_IOS视频教程_OC教程_课件、源码
zemax宏学习笔记1
OC学习篇的教程项目,每个项目都是可以单独运行的。很赞的~
Swift与oc语法参照
培训机构的一份笔记,感觉很好用的