OC基础语法学习笔记-20120712

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;
}
}
---------------------------------

你可能感兴趣的:(OC基础语法学习笔记-20120712)