您的位置:首页 > 其它

oc中一些注意的语法

2015-11-12 19:35 344 查看
oc中是有goto语句的,goto语句后面跟着一个标签,表示后面将会跳转到哪里,标签的定义是字符串后面加一个冒号

例如 start:

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
int i = 0;
start:
NSLog(@"%d",i);
if(i < 10) {
goto start;
}
}
return 0;
}
goto语句可以用于突破多重循环

由于goto语句打破了常规的循环等,所以建议尽量不要使用

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
start:
for(int i = 0;i < 5;i++)
{
for(int j = 0;j < 6;j++) {
NSLog(@"%s","cao");
if(j > 1)
goto start;
}
}

}
return 0;
}
块的基本使用

定义快必须以^ 开始,

定义块的返回值类型可以省略,而且经常会省略声明块的返回值类型

定义块无需指定名字

如果块没有参数 此时参数部分的括号不可省略,但内部可以留空,通常建议使用void为占位符

如果程序需要多次使用该块,则可以将其赋给块变量,

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
//定义不带参数,无返回值的块
void (^printStr)(void) = ^(void){
NSLog(@"%s","xuexi");
};
printStr();
//定义带参数,有返回值的块
double (^hypt)(double ,double) = ^(double num1 ,double num2) {
return num1 + num2;
};
hypt(1,2);
//将块赋给指定的块变量  带参数无返回值 在定义块后面是返回值的类型
void (^print)(NSString *);
print = ^(NSString* info)
{
NSLog(@"info参数为:%@",info);
};
print(@"nihao");

}
return 0;
}
使用)block来访问内部变量,一般来说块是不允许访问内部变量的,因此可以用这个来代替 好像block不能用

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
@autoreleasepool {
int i = 20;
void(^printStr)(void) = ^(void) {
NSLog(@"%d",i);
};
i = 10;
printStr();
}

return 0;
}
输出还是20

函数形参可变的方法 只需要在后加上...

-(void)setname:(NSstring *)name ...;
在定义变量的时候有4个访问符

为@private @package @public @protected protected就是子类可以进行访问 package就是生成的同一镜像,也就是在同一个字目录下的文件可以进行访问,而子类就不允许访问

@property 和@synthesize 前者是自动生成get和set方法,后者是改变生成的变量名

@synthesize window = _window;表示生成的变量名是_window,而不是window

atomic 是指在多线程的情况下,避免对内部的成员变量进行修改,因为大部分的情况下都是但线程,因此使用nonatomic

copy是指当调用setter方法的时候,先将变量烤给一个副本,再赋值给原变量

strong和weak的区别 前者是当赋值给对象的时候,不会自动的回收,一个是会自动的回收

kvc 通过键值对来进行赋值

[user setValue:@"nihao",forKey:"name"];


还有一种是valueforKey
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: