//
// ReViewClass.h
// hellowWorld
// 本类是oc复习练手类
// Created by hongtao on 2018/3/26.
// Copyright © 2018年 hongtao. All rights reserved.
// #import <Foundation/Foundation.h> /**
OC常量:
头文件里声明常量:
extern NSString * const MyOwnConstant;
extern NSString * const YetAnotherConstant;
在.m中通过赋值定义常量:
NSString * const MyOwnConstant = @"myOwnConstant";
NSString * const YetAnotherConstant = @"yetAnotherConstant";
*/
//常量声明 注意:可以在@interface外面声明。
extern const NSString* EAST ;
extern const NSString* WEST ; @interface ReViewClass : NSObject{ /**
要点
(1)基类的私有属性能被继承,不能被使用。
(2)OC中的继承是单继承:也就是说一个类只能一个父类,不能继承多个父类
(3)OC只能单继承
(4)OC所有类都有NSbObject基类
**/ /**
范围修饰词
(1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。
(2)@protected (受保护的)只能在当前类和子类的对象方法中访问 (默认访问权限)
(3)@private (私有的)只能在当前类的对象方法中才能直接访问
(4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通 过变量名访问
**/
@public int _id ; @public NSString *_name ; /*
不写关键字默认是@private
private 变量能不能被继承?
能继承不能用,除非父类提供操作方法
*/
@private int classId ; }
//常量声明,可以放这里,但不能放上面{}内。
//extern const NSString* NORTH =@"north",不能在头文件里直接赋值。
extern const NSString* NORTH;
extern const NSString* SOUTH; @property (assign) NSString* mDescription ;
/*
属性:
(1)关键字@@property
(2)自动合成getter和setter方法。当声明一个属性(property)的时候编译器默认情况下会自动生成相关的getter和setter方法
(3)属性(property)关键词能够传递出相关行为的额外信息。属性提供了一些可能会使用的特性来进行声明,
包括
assign vs copy vs weak vs strong
atomic vs vs nonatomic
readwrite vs readonly 老版本 @property 需要在.m文件中对应使用synthesize 新版synthesize作用如下:
1.@synthesize 的作用:是为属性添加一个实例变量名,或者说别名。同时会为该属性生成 setter/getter 方法。
2.禁止@synthesize:如果某属性已经在某处实现了自己的 setter/getter ,可以使用 @dynamic 来阻止 @synthesize 自动生成新的 setter/getter 覆盖。
3.内存管理:@synthesize 和 ARC 无关。
4.使用:一般情况下无需对属性添加 @synthesize ,但一些特殊情形仍然需要,例如protocol中声明的属性。
*/ /**
在括号外面声明方法,比如set get 方法。
*/ -(void)set_id :(int)stuId ;
/*
set_id知识点:
(1)oc 语法中如果想使用和java一样的"." 去访问类成员变量,那么必须定义一个与变量名相同的get方法。
注意是get+变量名:
例如有set_id以后ReViewClass 实例指针可以 ReViewClass._id ;否则 ReViewClass->_id ;
(2)在点语中可以调用不带参数的任何方法如:-(NSString*)getIdAndName;
*/
-(void)setName:(NSString *)stuName; -(int)getId;
-(NSString*)getName ;
-(NSString*)getIdAndName: (NSUInteger) stuId;
-(NSString*)getIdAndName;
/*
可以方法重载 同名不同参数
*/ -(ReViewClass *) init ;
+(int) getInstanceCount ; @end
//
// ReViewClass.m
// hellowWorld
//
// Created by hongtao on 2018/3/26.
// Copyright © 2018年 hongtao. All rights reserved.
// #import "ReViewClass.h" /**
静态变量的特性:
(1)静态变量的作用域是与它定义的位置有关系
定义在文件中它的作用域就是整个文件,并且是私有的,其他的类或其他的文件是不可以访问该静态变量的
定义在方法内,它的作用域就是这方法,其他的方法是不可以访问该静态变量
(2)静态变量只初始化一次(和java中是一样的)
类方法和实例方法甚至函数都可以使用静态变量
(3)静态变量定义在源文件中(.m)
(4)静态变量可以定义在方法或函数体外,也可以定义在方法(类方法和实例方法)或函数体内。
静态变量定义在方法或函数体外
该方式适用于当静态变量会被本文件内的多个函数使用的情况,最好能把静态变量定义统一放在源文件的起始处(@implementation的外面), */
//静态变量实例。
static int instanceCount ; //常量赋值
const NSString* EAST =@"east" ;
const NSString* WEST =@"west"; @implementation ReViewClass @synthesize mDescription ; const NSString* NORTH = @"north" ; -(void)set_id:(int)stuId{
_id = stuId ;
}
-(void)setName:(NSString *)stuName{
_name = stuName ;
}
-(int)getId {
return _id ;
}
-(NSString*)getName {
return _name ;
} -(NSString*)getIdAndName: (NSUInteger) stuId;
{
NSMutableString * str = [[NSMutableString alloc]init];
[str appendString:_name];
[str appendString:[NSString stringWithFormat:@"id:%d",_id]];
return str ;
}
-(NSString*)getIdAndName;
{
NSMutableString * str = [[NSMutableString alloc]init];
if(nil!=_name)
[str appendString:_name];
[str appendString:[NSString stringWithFormat:@"id:%d",_id]];
return str ;
} +(NSString *)toString{
return [NSString stringWithFormat:@"id:%d" ,];
} //类方法用于操作静变量
+(int) getInstanceCount {
return instanceCount ;
}
-(ReViewClass*) init{
instanceCount++;
return [super init];
} @end
#import <Foundation/Foundation.h>
#import "ReViewClass.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
extern NSString* NORTH ; // insert code here...
NSLog(@"Hello, World!");
ReViewClass *reviwClass = [[ReViewClass alloc]init];
ReViewClass *reviwClass1 = [[ReViewClass alloc]init];
ReViewClass *reviwClass2 = [[ReViewClass alloc]init];
ReViewClass *reviwClass3 = [[ReViewClass alloc]init];
ReViewClass *reviwClass4 = [[ReViewClass alloc]init];
[reviwClass setName:@"hongtao"];
reviwClass._id = ;
reviwClass.mDescription = @"string property!";
NSLog(@"%@,%@",reviwClass.getIdAndName ,[reviwClass getName]);
NSLog(@"%d",[ReViewClass getInstanceCount]);
NSLog(@"%@",NORTH);
// NSString* temStr =[reviwClass getIdAndName];
//运行了相应方法,但方法返回值并没有得到- (void)performSelector:原型
[reviwClass performSelector:@selector(getIdAndName:) withObject:@() afterDelay:(1.2f)]; }
return ;
}

oc 基本语法 类 静态变量 常量的更多相关文章

  1. PHP 类属性 类静态变量的访问

    php的类属性其实有两种,一种是类常量,一种是类静态变量.两种容易引起混淆. 如同静态类方法和类实例方法一样,静态类属性和实例属性不能重定义(同名),但静态属性可以和类常量同名. <?php c ...

  2. python类静态变量

    python的类静态变量直接定义在类中即可,不需要修饰符,如: 1 class Test: stc_attr = 1 def __init__(self,attr1,attr2): self.attr ...

  3. php 类静态变量 和 常量消耗内存及时间对比

    在对类执行100w次循环后, 常量最快,变量其次,静态变量消耗时间最高 其中: 常量消耗:101.1739毫秒 变量消耗:2039.7689毫秒 静态变量消耗:4084.8911毫秒 测试代码: cl ...

  4. C++类静态变量的一种使用特例

    不同进程里的数据默认情况下是互不影响的. 静态变量是属于类本身的,它的所有实例可以共享这个静态变量,但是有个先天条件就是在同一个进程的情况下!!

  5. php类 静态变量赋值 static $name="abc"

    <?php class test { static $name="abc"; } echo test::$name; 1.巴斯科范式 class_statement: var ...

  6. C# 静态变量、静态函数、实体变量、实体函数在一个类中的执行顺序

    为了弄清这个代码,写了个测试,但是测试的结果和往上的代码有所差别,仁者见仁,智者见智了.如果我的测试用例用问题,欢迎指出. 首先,方法的是在被调用时执行,但是静态方法在所有地方都可以调用,应该在很早的 ...

  7. Java变量类型,实例变量 与局部变量 静态变量

    实例变量: 实例变量在类中声明,但在方法的外面,构造函数或任何块. 当空间分配给某个对象在堆中,插槽为每个实例变量创建值. 当一个对象与使用关键字 “new” 来创建,在对象被销毁销毁创建的实例变量. ...

  8. C#静态变量 总结

    在C#程序中,没有全局变量的概念,这意味着所有的成员变量只有该类的实例才能操作这些数据,这起到了“信息隐藏”的作用.但有些时候,这样做却不是个明智的选择. 假设我们要定义一个图书类,要求该类能保存图书 ...

  9. Java---类加载机制,构造方法,静态变量,(静态)代码块,父类,变量加载顺序

    直接上代码: 代码1: public class ConstroctTest { private static ConstroctTest test = new ConstroctTest(); // ...

随机推荐

  1. java web中 8080端口号被占用的问题处理,终于明白了 Address already in use: JVM_Bind(端口冲突)

    1.错误描述 2011-7-20 11:05:18 org.apache.catalina.core.StandardServer await严重: StandardServer.await: cre ...

  2. pyqt5 中的addStretch

    一直对addStretch感觉怪怪的,直到看见了下面这段话: addStretch()函数用于在控件按钮间增加伸缩量, 伸缩量的比例为1:1:1:6,意思就是将控件以外的空白地方按设定的比例等分为9份 ...

  3. MySQL数据库笔记一:简介及简单操作

    一.初识MySQL数据库 1.数据库的概述 <1>数据库:Database 长期存储在计算机内的,有组织的,可共享的数据集合. 存储数据的仓库.(文件) <2>数据库管理系统: ...

  4. thinkphp5.0 column多字段问题

    一个字段:返回一维数组,数字索引为键名: 二个字段:返回一维数组,第一个字段为键名,第二个字段为元素值: 三个或更多字段:返回二维数组,第一个字段为键名,全部字段值为数据元素: 指定键名:方法的第二个 ...

  5. Darknet的整体框架,安装,训练与测试

    目录 一.Darknet优势 二.Darknet的结构 三.Darknet安装 四.Darknet的训练 五.Darknet的检测 正文 一.Darknet优势 darknet是一个由纯C编写的深度学 ...

  6. 网络初级篇之VLAN(原理)

    一.早期网络的问题 1.若某时刻有多个节点同时试图发送数据,极易产生冲突域,这样使得网络传输效率大大降低. 2.从一节点发送的数据都会被送到各个节点,极易形成广播域,这样会使得产生太多的广播流量而耗费 ...

  7. deep_learning_cross_entropy

    交叉熵损失函数 交叉熵代价函数(Cross-entropy cost function)是用来衡量人工神经网络(ANN)的预测值与实际值的一种方式.与二次代价函数相比,它能更有效地促进ANN的训练.在 ...

  8. insightface数据裁剪过程

    数据裁剪 我们用lfw数据做实验,你也可以自己找数据. lfw数据 http://vis-www.cs.umass.edu/lfw/ 我下载的是这个原图像https://drive.google.co ...

  9. GitChat·人工智能 | 除了深度学习,机器翻译还需要啥?

    本文开始要写作的时候,翻译圈里出了一个“爆炸性”的事件.6月27日下午,一个同传译员在朋友圈里爆料:某AI公司请这位译员去“扮演”机器同传,制造人工智能取代人工同传的“震撼”效果. 这个事件瞬间在译员 ...

  10. 卸载nginx

    sudo apt-get remove nginx nginx-common # 卸载删除除了配置文件以外的所有文件. sudo apt-get purge nginx nginx-common # ...