All of this is IMO, of course :)

> 1. How good is the string/character manipulation performance of MonoTouch in
> comparison to Objective C? Is it almost as fast?
>

Should be the same or faster. There may be a very small overhead going
from a string <-> NSString, but we would be talking nano seconds, I
suspect. If you are just manipulating strings in your app, not passing
them to Obj-C code (ie, CocoaTouch) then both should be about the same
- c#/mono's string handling is, as far as I know, as good as desktop
.NET (that said you are running on a lower-ghz CPU, so ....)

> 2. How good is the floating point math performance of MonoTouch in
> comparison to Objective C?
>

I'd have to let someone from Xamarin answer that, but FP math is built
into the CPU, I think, so... should be native speeds?? A float is a
float when you are looking at ARM binary code.

I think MonoTouch can use the SMID stuff on the arm chips, ie the ARM
equivalent to SSE/MMX ....

Sorry, not something I've had to look into. I suspect it'll be the
same as Obj-C, unless you are working with data types which are not
CPU-native.

> 3. My C# program is currently around 500k in filesize. How much would this
> translate to once it's ported with MonoTouch?

Depends on too many things. Usually, start with 1.5Meg (hello world),
and go up from there.

you C# app isn't 500k. It's 500k of IL + the .NET framework, which is
usually about 20meg or so. MonoTouch has to bundle some of that
framework into the exe, as there is no framework on the phone. the
linker gets rid of a lot of it tho.

In my current "larger" app (earnestapp.com) the assembles are around
2.5meg (IL code - .DLL/.EXE) and the resulting binary is about 8meg.
On top of that, I have around another 5meg of images and other
resources, and it zips down to 7meg (ALL apps are sent out and
submitted to apple as zips - aka IPA's. Look in iTunes, find one, copy
it, rename to .zip, unzip and have a look)

If it's all non-visual C#, and doesn't pull in a lot of other stuff,
then I suspect it'll be quite small. But it's very much "how long is a
piece of string".

>
> 4. How much of the code would I need to change when using MonoTouch? Apart
> from GUI stuff, I'm hoping very little. For example, if I have lines like
> these (unrelated):
>
>    -  CultureInfo.CurrentCulture.TextInfo.ListSeparator
>
>    -  text.Split(new string[] { "TEST" },
> StringSplitOptions.RemoveEmptyEntries);
>
>    -  Convert.ToDouble(myVar, CultureInfo.InvariantCulture)
>
>    -  (measure)Enum.Parse(typeof(measure), myVar)
>
>    -  Array.Resize(ref ops, i)
>
>    ....could I use those pieces of code directly, or would they need
> adjusting for MonoTouch?
>

I'd say they would work, off the top of my head. Most of the issue is
around Reflection.Emit, so when you emit some IL and then execute it.

> 5. I use the TimeSpan and DateTime classes. Are these fully supported with
> MonoTouch?

yes.

> 6. How thorough is the Globalization library and CultureInfo class support?
> Will MonoTouch recognize the decimal point character etc.?
>

Yes. And the CocoaTouch ones have very good support for I18N, too,
baked into the OS. Makes windows look awful (which it is)

I use this, for example:

return CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;

So that German's get 10,00 and UK gets 10.00

> 7. How is the File class used? Are disc access MonoTouch functions
> equivalent to their pure C# counterparts? How about a piece of code such as
> `Application.StartupPath`?

Yes. File works just fine. There are a few restrictions - you can't
write into your .app folder, but you have a "Documents" folder, a
"Library" folder and other stuff. The .NET-specific IsolatedStorage
stuff works find (accross MonoTouch, MonoForAndroid, WP7, Silverlight,
Win8, Win7 etc)

This might help:

http://docs.xamarin.com/ios/tutorials/Working_with_the_File_System

One thing to note: you really should (must?) use Path.Combine. iOS is
Unix. Unix is /. Windows is \

This will not work on iOS (at all, ever):

.\Documents\myfile.txt

it has to be

./Documents/myfile.txt

Path.Combine will get this right based on the OS.

> 8. In C#, the RichTextBox supports Rtf as input. Will MonoTouch allow me to
> use an equivalent GUI widget which allows Rtf input?
>

Not as far as I know. The default iOS textbox doesn't do rich text, at
least as far as I've seen. You'd be writing your own - even if you use
Obj-C.

iOS has native PDF, which might work if you can convert the RTF to PDF
if it's for viewing.

> 9. How about HttpWebRequest, WebRequest, and GlobalProxySelection for
> reading a file from the web?

Yup. All work - I use them. WebClient works too.

Check with Xamarin to see if the Proxy stuff picks up the device proxy
now. It never used to, but it might do now. I tend to set it in my
code as needed, tho.

If you use the CocoaTouch native stuff, it all picks up the system
proxy, but thats also based on a whole different delegate-driven
model.

>
> 10. Is threading supported well, including the background worker system?

Yes. you can also use System.Threading.Tasks (which is sweet), as well
as Thread.QueueWorkItem etc.

Task.Factory.StartNew(() => {
  return "do some stuff on the thread";
}).ContinueWith(taskResult => {
                        Console.WriteLine("oh, I'm on the main thread now!");
}, new UIKitScheduler())

This is also handy for the UIKitScheduler, which makes sure the
continuewith is run on the CORRECT UI thread.

https://gist.github.com/1431457

> 11. Are dictionaries fully supported?
>

You mean System.Collection.Dictionary? and
System.Collections.Generics.Dictionary<T,U>? Yes. All of
System.Collections[.Generic] is there.

> 12. And finally, with Monotouch, can I mix C# and objective C code if I
> wanted to? Or does it all have to be C#?

You can write Obj-C and make it into a library (.a - object file), and
then link that in. There is a fairly large bunch of bindings on github
for various things which work like this, including Google Analytics,
TestFlightapp.com and a load of others. It's not trivial to write at
first, but it's not overly hard either.

https://github.com/mono/monotouch-bindings

All of these take the published Obj-C output and integrate it into MonoTouch.

Some things to remember:

1. Your desktop machine is (most likely) a quad or 8 core 3.2Ghz
machine with 8-16GB RAM and unlimited swap. An iPhone 4S has 512meg
(1GB?) + 800mhz CPU. And _no_ swap. You can't load a huge document
into memory and expect it to work!

2. Get as much off the UI thread (the main thread) as possible. this
will make your app _feel_ faster, as the animations and the like will
be smooth, even if the app is taking a while to do something. Async
programming is pretty much a requirement (you can "not do it" but the
results are usually kinda awful)

3. Consider rethinking what your app does. You are (I suspect) moving
from a 24" screen to a 3.5" one (or 9" for the iPad). Mouse+Keyboard
-> finger. The same UI paradigms don't port over very well. Consider
reading Tapworthy by Josh Clark:
http://shop.oreilly.com/product/0636920001133.do or some other iOS
design books. I'm not talking about pixel pushing (tho having a full
time designer is a huge help), but more thinking in the context of the
user, what they are doing, WHEN and WHERE they are doing it, etc.

4. Plan the app out on paper before you code a line. Scan the paper in
and get a feeling for it using the Photos app on the phone. There are
iOS templates around that you can build realistic wireframe (google
"Teehan and Lax") or just use pen/graph paper or Balsamiq. You can
work out a lot of issues cheaply doing this. Briefs is quite good for
this:

http://giveabrief.com/

(not sure it works anymore tho - Apple pulled it from the appstore, so
it's a bit manual now)

5. CocoaTouch is a big API, as is .NET or Windows. Expect it to take a
little while to learn the ins and outs of how it works. It has a
different design philosophy to windows or .NET (highly OO, lots of use
of patterns eg delegate), but it also provides you with a huge amount
of functions - esp in the UI.

Hope that helps.

Nic
-- 
Nic Wise
t.  +44 7788 592 806 | @fastchicken | http://www.linkedin.com/in/nicwise
b. http://www.fastchicken.co.nz/

Earnest: Self-employed? Track your business expenses and income.
http://earnestapp.com
Nearest Bus: find when the next bus is coming to your stop. http://goo.gl/Vcz1p
mobileAgent (for FreeAgent): get your accounts in your pocket.
http://goo.gl/IuBU
Trip Wallet: Keep track of your budget on the go: http://goo.gl/ePhKa
London Bike App: Find the nearest Boris Bike, and get riding! http://goo.gl/Icp2
_______________________________________________
MonoTouch mailing list
[email protected]
http://lists.ximian.com/mailman/listinfo/monotouch

Reply via email to