A. IOS开发 函数传入指针,与函数传入引用的区别
相关概念
c++三种传递参数方式
传参数的值(称值传递,简称传值),传参数的地址(称地址传递,简称为传址),和引用传递(称为传引用),相应的函数传值调用,传址调用和传引用调用
形参、实参
函数定义时参数表中的参数称为形式参数,简称形参;函数调用时参数表中的参数称为实际参数,简称实参。实参和形参之间的数据传递称为形实结合
说明
通常情况下,C++是传值调用,它是单向的,只能从实参到形参。形参实质上市实参的一种拷贝,所以传递时不会改变外部实参的值
引用的含义及功能
即别名,功能主要是传递函数的参数和返回值
引用的规则
(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。
(2)不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)。
(3)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。
实例
#include <iostream>
using namespace std ;
void Swap(int x, int y) ;
int main(void)
{
int a = 1 ;
int b = 2 ;
cout << "a = " << a << ", " << "b = " << b << endl ;
Swap(a, b) ;
cout << "a = " << a << ", " << "b = " << b << endl ;
system("pause") ;
return 0 ;
}
一:值传递
void Swap(int x, int y)
{
int temp = x ;
x = y ;
y = temp ;
}
输出结果:
a = 1, b = 2
a = 1, b = 2
原因:Swap(int x, int y)函数采用值传递的方式,传入的实参实际上是a和b的副本而非其本身,所以对副本的改变并不会反应到a和b本身上。
二:引用传递
void Swap(int &x, int &y)
{
int temp = x ;
x = y ;
y = temp ;
}
输出结果:
a = 1, b = 2
a = 2, b = 1
原因:Swap(int x, int y)函数采用引用传递的方式,传入的实参实际上是a和b的引用,对引用的改变会直接反应到a和b本身上。
三:指针传递
1. 改变指针本身
void Swap(int *x, int *y)
{
int *temp = x ;
x = y ;
y = temp ;
}
调用方法:Swap(&a, &b) ;
输出结果:
a = 1, b = 2
a = 1, b = 2
原因:Swap(int x, int y)函数采用指针传递的方式,传入的实参实际上是a和b的指针的副本,而且改变的是副本本身而非其间接引用,所以不会影响的指针所指向的值,即a和b本身上。
B. iOS 什么是函数式编程
在函数式语言中,函数作为一等公民,可以在任何地方定义,在函数内或函数外,可以作为函数的参数和返回值,可以对函数进行组合。 纯函数式编程语言中的变量也不是命令式编程语言中的变量,即存储状态的单元,而是代数中的变量,即一个值的名称。
像 js,python,scala等语言中多少都有函数式编程的影子
C. 如何评价 Apple 新推出的编程语言 Swift
有人说它相当于 C#,或是相当于 Scala 对 java 的改进,我可以告诉大家,Swift 不是这样的语言。它更像一种让人快速做原型的 toy language。
要求 Apple 发布下一代 Objective-C 语言的呼声早就有了,每年写数万字 OS X 评论的 Ars Technica 两年前就写了 Apple 应该去做一个语言,Objective-C without C 并且使用更现代的功能和更短的 API,以及对自动类型推导的支持,文章见
OS X 10.8 Mountain Lion: the Ars Technica review 。
但 Apple 显然没有认真对待这门语言。很明显的,他们根本不想把ObjC给替换掉。并且按Apple的风格,如果他们把Swift当ObjC的未来来对待,肯定会有一到两个iOS/Mac应用使用Swift改写。(比如Apple 当年要砍 Carbon,首先做的就是把 Finder 重写了)。
从语言角度,Swift 有太多的缺点:
- 它的标准库太差,只有Dictionary, Array 和 String及数这几种数据结构,连个 Set 都没有。想用别的?你还是要用 ObjC 的。
- 它没有任何对异步/同步编程的支持。它没法绑定使用 GCD,因此任何正经的网络应用根本无法编写。
- 它没有任何的保护机制(private, protected),所有的 method和 variable 都是全局可见的,这显然不能满足正经工程项目的需要。
- 只能和 ObjC 互动。如果你想正经地使用C或者C++,你得写 ObjC 的 wrapper。
- 没有办法 catch Objective-C 的 exception,如果一旦出了 exception,你的 App 立马就崩了。
Chris 在设计这门语言时,可以明显地看到他的短视。这也很正常,他是一个做编译器的,不是做语言研究的。所以这门声称支持函数式编程的语言,根本不是函数式的:
- 仅有的支持在lazy,闭包,及简单的函数语言函数(如map, filter)。这ObjC中都能做
- 没有pattern matching
- 类型推导差不多和 C++11 差不多,没有使用hindley milner。
从上面这些特点看, Apple对其的定位仅是给对ObjC头疼的开发者降低学习曲线所推出的玩具语言。前面五条中的每一条,基本都是致命的,因此 Apple 自己的项目也不会使用。做个早期 proof of concept的 prototype 到是可以的。
D. Swift能代替Objective-C吗
这是我在网上上看到的答案,复制粘贴过来和大家分享一下,因为我和很多人一样很关心Swift的出现对Mac开发的影响和对Objective-C的影响。
我文章的中心是,以 Apple 目前给出的各种资料来看,这语言不会替代掉ObjC,它不是下一代的ObjC。它有很多缺点,使得它不足以做大型项目。这些缺点使得,Apple 自己都没有使用它做 Mac/iOS 的 app。我不排除明年后年它有很大改进,但至少现在还没有这端倪。
因此,如果你会ObjC,你不需要去看它。
但你如果问我这语言对普通开发者重要不重要,我说重要,可以明确告诉你这一点--它是 Apple 在 WWDC 向全世界推出的重磅语言我怎麽能说它不重要? 它降低了入门的门槛。使得大量的 JS, Python, Ruby用户会使用 Apple 的技术为其开发程序。它的作用,和 Core Data, Interface Builder 一样,能让你快速写出一个能用的程序来。但如果你想稍做些正经事,就心有馀力不足了。所以和 Apple 自己的 Mail 也不会去用 Core Data,自己 iPhoto 不会去用 UICollectionView,稍复杂的 App 都不会去用 Interface Builder 一样,Apple 自己不会用 Swift。它只是给三五个人的小团队能迅速做出能用的程序,让大公司能快速做些 Prototype 而已。
====
有人说它相当于 C#,或是相当于 Scala 对 Java 的改进,我可以告诉大家,Swift 不是这样的语言。它更像一种让人快速做原型的 toy language。
要求 Apple 发布下一代 Objective-C 语言的呼声早就有了,每年写数万字 OS X 评论的 Ars Technica 两年前就写了 Apple 应该去做一个语言,Objective-C without C 并且使用更现代的功能和更短的 API,以及对自动类型推导的支持,文章见 OS X 10.8 Mountain Lion: the Ars Technica review 。
但 Apple 显然没有认真对待这门语言。很明显的,他们根本不想把ObjC给替换掉。并且按Apple的风格,如果他们把Swift当ObjC的未来来对待,肯定会有一到两个iOS/Mac应用使用Swift改写。(比如Apple 当年要砍 Carbon,首先做的就是把 Finder 重写了)。
从语言角度,Swift 有太多的缺点:
它的标准库太差,只有Dictionary, Array 和 String及数这几种数据结构,连个 Set 都没有。想用别的?你还是要用 ObjC 的。是的,当你用原生数据结构时,速度比ObjC快。但是那仅限于那几个。 它没有任何对异步/同步编程的支持。它没法绑定使用 Grand Central Dispatch,因此任何正经的网络应用根本无法编写。
它没有任何的保护机制(private, protected),所有的 method和 variable 都是全局可见的,这显然不能满足正经工程项目的需要。
只能和 ObjC 互动。如果你想正经地使用C或者C++,你得写 ObjC 的 wrapper。这基本限制了你使用大量的 C/C++ 库函数。
没有办法 catch Objective-C 的 exception,如果一旦出了 exception,你的 App 立马就崩了。这也基本限制了你使用很多 ObjC 旧代码库。
Chris 在设计这门语言时,可以明显地看到他的短视。这也很正常,他是一个做编译器的,不是做语言研究的。所以这门声称支持函数式编程的语言,根本没有大多函数式语言都普遍存在的功能:
仅有的支持在lazy,闭包,及简单的函数语言函数(如map, filter)。这ObjC中都能做
没有pattern matching
类型推导差不多和 C++11 差不多,没有使用hindley milner
从上面这些特点看, Apple对其的定位仅是给对ObjC头疼的开发者降低学习曲线所推出的玩具语言。前面五条中的每一条,基本都是致命的,因此 Apple 自己的项目也不会使用。做个早期 proof of concept的 prototype 到是可以的。
我可以想象,实现上 Swift 是很简单的(LLVM很成熟了,写个新语言越来越简单,比如只要几步就能做个小语言: 1. Kaleidoscope: Tutorial Introction and the Lexer),当然有可能 Apple 将来会解决这些问题使得其真正实用。但现在来看,Apple 并不希望 Swift 来替代 Objective C。
E. ios的kvo和响应式编程一样吗
ReactiveCocoa 可以说是结合了函数式编程和响应式编程的框架,也可称其为函数响应式编程(FRP)框架,强调一点,RAC虽然最大的优点是提供了一个单一的、统一的方法去处理异步的行为,包括delegate方法
F. 可以跳过 Objective-C 然后直接学习 Swift 语言吗
如果只是学习Swift的语法和做基本练习的纯计算性的编程,不用学习Objective-C,用Swift的Playground就很好了。但没有Objective-C的基础,几乎不可能用Swift写出Mac OSX和iOS的GUI实用程序的,这些需要cocoa框架,而cocoa框架是以Objective-C来编写API的。Swift的cocoa API其实只是对Objective-C的API的直接bind。
这几天用了Swift后感觉其和Objective-C是浑然一体的,用Swift调用Objective-C的函数是非常自然的,两者之间没有明显的界限,就像编写C语言的嵌入式汇编一样。
我觉得苹果为何要推出Swift这门语言,主要还是Objective-C缺少现代编程语言的特性,特别是很难在Objective-C中增加函数式编程的特性。推出Swift语言,可以大量吸收现代编程语言的优点,加入函数式编程的特性,使得可以快速开发健壮、可靠、复杂的应用程序。而Swift又不是直接取代Objective-C的位置,是在其之上,因此又很好的继承了Objective-C的优良的GUI应用的编程能力。即能创新进取,又保持优良传统,多好的一个设计呀。有了Swift后,苹果平台上的Mac OSX和iOS的native应用开发就进入了现代编程语言的范畴,跟上了时代的发展。
G. ios支持swiftpoint吗
《Swift 的强大之处》:介绍了Swift语言的特性,包括支持函数式编程、类型安全、不可变性等。
《Swift 的函数式 API》:Swift 引入了泛型和函数式编程的思想,极大地扩展了设计的空间。文章借对 Core Image 进行函数式 API 封装为例,展示出应用 Swift 进行函数式编程的能力。
《iOS8开发者专题》:由CocoaChina整理出来的iOS8相关的资料汇总。
《用 Swift 开发一个 TODO 应用》:作者 @请叫我汪二 在文章中教你如何完成一个 TODO 的应用,功能包括添加任务和浏览任务。适合有一定 Objective-C 的开发基础但是还没怎么接触 Swift 的 iOS 开发者,希望通过这样一个简单的例子可以和大家一起熟悉一下 Swift。
《黑魔法attribute((cleanup))》:编译器属性 __attribute__用于向编译器描述特殊的标识、检查或优化。作者在文章中介绍了其中一个名为cleanup的“黑魔法”属性。
《Swift中类的初始化器与继承》:Swift 为类定义了两种初始化器来确保类中所有的储存属性都能得到一个初始化值。这两种初始化器就是“指定初始化器”(Designated Initializer)与“便利初始化器”(Convenience Initializer),文章对其做了介绍。
《大屏iPhone的适配》:自从苹果出了大屏iPhone后,iOS开发也要做适配了, 这里大概总结下这几天了解到的大屏适配的注意事项。
《Using Vector Images in Xcode 6》:文章介绍了在Xcode 6中使用矢量PDF图形的具体操作方法。
《Swifty methods》:文章讨论了Swift的函数命名习惯,并与Objective-C语言做了对比。
《Apple Pay Human Interface Guidelines》:苹果发布了支付功能Apple Pay的人机交互指南。
视频
H. ios 函数式编程为什么可以用点
由于iphone SDK都是需要使用Objective-C的语法调用,所以不能完全不用Obj-c. 另外,现在也没有针对iphone SDK的C++编译器。倒是有人在开发java编译器for iphone。xcode底层使用GCC编译器编译Obj-C,可以识别标准的C函数与语法。如果你能找到代替UIKit以及foundation的类库,应该也可以试试。 另外来看看苹果新版的iPhone软件开发协议: 应用程序仅能以苹果描述的形式使用SDK中提供的官方API,不能使用或调 用任何私有API。应用程序需原生使用Objective-C、C、C++语言编写,或由iPhone OS WebKit引擎执行JavaScript代码。只有以C、C++和Objective-C语言编写的代码可以编译并直接链接到官方API(禁止应用程序 通过中间解释程序或兼容层、工具调用官方API)。
I. cout << setiosflags(ios::left)和cout << left的区别是啥
一,cout是C++编程语言互换流中的标准输出流,需要iostream支持。读为 "c out"。 Cout的相关信息 1 cout的类型是 ostream 2 ostream使用了单例模式, 保护的构造函数,不能在类外创建另一个对象(用 ostream os 测试) 拷贝构造私有,不能通过已有对象,构造新对象(用 ostream os(cout) 测试) 拷贝赋值私有,(用 cout=cout 测试) 3 cout在命名空间std中,使用前需要using namespace std,或者std::cout 4 可以使用引用,或指针指向这个对象,意思想说,想用ostream 做一个函数的形式参数,就必须使用引用或指针。因为实参肯定是cout,且只能有这一个对象。 5 cout<<对象; 对象的类型用OO表示,如想用cout打印一个对象,即cout<<对象,可使用如下程序 friend ostream& operator<< (ostream& os,const OO& c) {//为什么必须使用return os << c.成员1 <<" : "<<c.成员2;} cout[英]['kaʊt][美]['kaʊt],标准输出; 。 二,cout[英]['kaʊt][美]['kaʊt],标准输出; 。
J. ios rac 哪个版本是oc
ReactiveCocoa 可以说是结合了函数式编程和响应式编程的框架,也可称其为函数响应式编程(FRP)框架,强调一点,RAC虽然最大的优点是提供了一个单一的、统一的方法去处理异步的行为,包括delegate方法,blocks回调,target-action机制,notifications和KVO.但是不要简单的只是单纯的认为他仅仅就是减少代码复杂度,更好的配合MVVM