1、类方法是属于整个类,而不属于某个对象。2、类方法只能访问类成员变量,不能访问实例变量,而实例方法可以访问类成员变量和实例变量。3、类方法的调用可以通过类名.类方法和对象.类方法,而实例方法只能通过对象.实例方法访问。4、类方法只能访问类方法,而实例方法可以访问类方法和实例方法。5类方法不能被覆盖,实例方法可以被覆盖。
为罗庄等地区用户提供了全套网页设计制作服务,及罗庄网站建设行业解决方案。主营业务为成都做网站、网站设计、罗庄网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
1.定义函数时,希望传入的参数不为nil,或者为nil时会有警告显示:
如下:
- (instanceype)initWithFoo:(NSString *)foo bar:(NSString *)bar sark:(NSString *)sark
__atttribute__((nonnull(1, 2)));
p.s. index从1开始,不是0,且只对对象生效。
该技巧同样来自,sunnyxx大神的微信,逗比狗~
2.定义函数时,希望子类override该方法时候,必须调用super,否则编译器直接报错。
@interface OldSix:NSObject
- (void)fooWithNothing __attribute__((objc_requires_super));
该技巧同样来自,sunnyxx大神的微信,逗比狗~
wait~~~~~
/*检查子类在重写该方法时有没有调用自己(父类)的实现
*对于一些可以被继承的类,需要子类在重某一调用父类的实现以保证正确的行为,通过在头文件方法的声明末尾添加`NS_REQUIRES_SUPER`
*可以让编译器检查子类方法有调用父类的实现。具体使用方法如下:
* - (void)viewWillAppear:(BOOL)animated NS_REQUIRES_SUPER;
*/
但是根据我的实际测试,发现sunnyxx大神仙的方法,没有任何显示效果,不知道是不是我打开的方式不对还是怎么,
总之,NS_REQUIRES_SUPER的方法亲测可用。
3.误删系统sdk头文件的解决办法
在终端中输入:
$ cd ~/Library/Developer/Xcode/DerivedData/ModuleCache/
$ rm -rf *
4.ARC下打印retainCount
extern uintptr_t _objc_rootRetainCount(id obj);
id test = [NSString new];
NSLog(@"retain count %lu",_objc_rootRetainCount(test));
5.工程报错下,仍然可以编译成功
6.定位方法的调用者
类方法: 也被称为静态方法,指 static关键字修饰的方法。此类方法属于类本身的方法,不属于类的某一个实例(对象)。在类方法中不可以直接使用实例变量。其调用方式有三种,可直接调用、类名、方法名、对象名。
实例方法:指的是不用static关键字修饰的方法,每个实例对象都有自身的实例方法,互相独立,不共享。其调用方式只能是对象名,方法名。
何时用静态方法,何时用类方法?
实例方法: 当你给一个类写一个方法,如果该方法需要访问某个实例的成员变量时,那么方法该被定义为实例方法。 一个类的实例通常有一些成员变量,其中含有该实例的状态信息。而该方法需要改变这些状态,那么该方法需要声明成实例方法。
类方法(静态方法):它不需要访问某个实例的成员变量,不需要改变某个实例的状态,我们把该方法定义为静态方法。
类方法和实例方法的误区:
静态方法常驻内存,实例方法不是。所以静态方法效率更高,但占内存。。(错误的)
事实上,方法都是一样,在加载时机和占用内存上,静态方法和实例方法是一样的。在类型第一次被使用时加载,调用的速度基本没有差别
静态方法在堆上分配内存,实例方法在栈上(错误)
事实上,所有的方法都不可能在堆上或者栈上分配内存,方法作为代码是被分配到特使的代码内存区域,这个代码内存区域是不可写的。
实例方法需要先创建实例才可以调用,比较麻烦,静态方法不用,比较简单。(错误)
事实上,如果一个方法不访问某实例成员变量或者不改变实例状态,那么就应该写成静态方法。
常用实例和类
第一种方式:声明实,调用实例方法
当一个类有多个实例,例如学生这个类,实例可以有学生甲乙丙丁。etc 我们就用第一种方式,在多线程的情况下,只要每个线程创建自己的实例,那么第一种方法通常是线程安全的
第二种:通过静态的实例去调用实例方法
第一步:编程入门课
时间预计:4个星期
推荐看公开课,Udacity也行,网易公开课也行,自己找一个面对对象语言(一般是JAVA, C++, Python)的课。我是在网易公开课看的斯坦福的CS106A,学的JAVA。
如果你纯粹学iOS开发,不推荐看哈佛CS50,CS50是给CS系的学生介绍整个计算机世界的框架,讲的内容比较多,进度比较快,对iOS开发其实有点累赘了。(臣妾有点跟不上啊!!)
计划安排是一天一课,看课程要求的书(至少看完一本)及大部分作业。这一阶段重点不是语法,而是以下3个目标。
目标:
1. 让自己对编程这件事感到适应。
写hello world。
怎么写function, 怎么调用function。
全局变量,局部变量这类基本知识点。
都是基本的东西。看看书,写多两个程序就欧啦。
2. 掌握编程语言的基本要素。
编程语言4个要素:
a. 基本的数据类型:整数,实数,character, string, boolean
b. 基本的运算符号:+-×/++--那啥的
c. 怎样输入输出
d. 怎样控制程序:sequence,selection,loop
3. 了解编程范式
面对过程编程。
面向对象编程。
第二步:上手iOS!
时间预计:2星期
强烈推荐CS193P,老头子讲的超级好!我的很多东西(对象思维啥的)是在这里跟着做练习的时候才真正明白的(好啦,也可能是上一堂课练习做得少的原因)。如果等到9月应该itunes U上会开始教iOS 7了。网易公开课的是2010年iOS 5版的,前10堂课,也行。(iTunes U上有完整的课)
CS193P说有prerequisite,一开始被吓到,事实证明还是可以学下去的。头两节课一头雾水,没关系,把itunes U上的课件下载下来,把所有代码打出来,然后一个个元素对应之前学的语言匹配,再不懂先放着,继续学后边的,过几天打多点代码就懂了。
感觉学5、6堂课,一个星期左右就可以开始进入下一阶段自己做东西了。之后用啥学啥,每堂课都有主题的。速度慢点的同学们,这阶段跟我一样准备两个星期吧!
第三步:开发app!
时间预计:2星期(本人...1个半月,实在不好意思说出口)
这个时间就可长可短啦,还包括美工,交互啥的。坚持要用啥学啥的原则,其实就是知道iOS SDK都有什么组件,每个组件有什么function而已。stackoverflow, Github, apple sample code多上,搜索引擎多用。如果有个师傅,这个阶段真的是进步神速。
好的!不出意外,你的第一个app就这么新鲜出炉了!从今天开始,成为一个冷艳逼格高尚的iOS开发者吧!
需求如题,如果是你,你一定首先想到看看JavaScriptCore有没有暴露出对应的 delegate 方法可以直接用,抱歉,还真没有。那该怎么办?怎么办?么办?办?......
记得之前有一篇关于 JSBridge 的文章有提到,直接 NSObject 类有一个方法,webView:didCreateJavaScriptContext:forFrame:,从语义上看,应该就满足上面的需求。
好,写个 NSObject 的分类实现下看看。
测试很简单,在 web 页面的 js 脚本里,调用 printHello(); 即可。
实践证明:好使!
熟悉 runtime 的话,这个很简单,调用 class_copyMethodList 把类里所有的方法取出来打印就好。有的时候,为了分析一个需求如何实现,可能要递归打印几个类的方法,从当前类,到其父类,到其爷爷类,...直到 NSObject 类。
感谢 oc 语言的创始人和开发者,每个类的类方法、实例方法都几乎可以做到望文生义,才让大家能有这一快乐!
最后,enjoy yourself!
方法是没有访问级别的,跟ObjectiveC跟C(不是C++)是类似的。
C里面定义了方法,但是如果不给出声明,别人调用时候是找不到的(虽然自己声明一个一模一样的方法也可以)。ObjectiveC也是一样,所有方法都没有访问保护级别(@property属性也是方法的一种)
只有一种有访问级别,就是大括号里面定义的成员变量,里面有public和private,貌似是没有protected的概念(可能有,但是我完全不用的)。