Since iOS 4.0 there is cool method in CoreLocation framework:
– (void)startMonitoringForRegion:(CLRegion *)region desiredAccuracy:(CLLocationAccuracy)accuracy
that can send events (even while application is in background) when phone is entering or leaving specified area.
But there are two “small” disadvantages:
1) Works only on iphone 4 and newer
2) It’s based on cell position (not GPS!) so accuracy is about houndreds of meters
Could be so beautiful.. :)